본문 바로가기

Webhacking/Dreamhack

[Web] Dreamhack_ xss-2

https://dreamhack.io/wargame/challenges/268/

 

xss-2

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. Reference ClientSide: XSS

dreamhack.io


페이지는 XSS1 문제와 동일하다.

그런데 vuln 페이지로 들어가 보니 xss1에서 떴던 alert 창이 안뜬다!

분명 있는데...

 

소스코드를 찾아보았다.

 

이렇게 되어있는데

찾아보니 innerHTML이 HTML5에서 innerHTML을 이용해서 입력된 <script> 태그를 허용하지 않는 거라고 한다.

그럼 script태그 말고 다른 태그를 사용하면 될 것 같다.

 

그리고 app.py 코드를 보면 vuln 함수만 다른데, 강의에서 render_template 함수는 전달된 템플릿 변수를 기록할 때 HTML 엔티티코드로 변환해 저장하기 때문에 XSS가 발생하지 않는다고 했으니, 결과적으로 vuln 페이지에 xss가 발생할 수 없다는 게 xss-1 문제와 차이점 같다.

 

Xss <script> 우회라고 검색해보니 보통 img 태그와 onerror를 쓰는 것 같다.

 

https://gomakethings.com/preventing-cross-site-scripting-attacks-when-using-innerhtml-in-vanilla-javascript/

 

Preventing cross-site scripting attacks when using innerHTML in vanilla JavaScript

IMPORTANT: some of the information in this article is out-of-date. Please read this update article instead. I generally use innerHTML to inject HTML into an element with vanilla JavaScript. Yesterday, one of my students asked me about the danger of cross-s

gomakethings.com

(후에 문제 풀이를 보니 svg/onload를 사용하는 풀이도 있었다!)

 

 

위의 그림처럼 사용하는데 나는 alert를 쓰지 않고 xss-1에서 했던 방식과 비슷하게

 

<img src=a onerror='location.href="/memo?memo="+document.cookie'>

 

이렇게 줬다.

그리고 memo 페이지로 돌아가 보면 flag가 나와있는 걸 볼 수 있다!

 

'Webhacking > Dreamhack' 카테고리의 다른 글

[Web] Dreamhack_ file-download-1  (0) 2022.08.27
[Web] Dreamhack_ command-injection-1  (0) 2022.08.27
[Web] Dreamhack_ csrf-2  (0) 2022.08.26
session-basic  (0) 2022.08.15
cookie  (0) 2022.08.15