Portswigger-DOM XSS in document.write sink using source location.search

problem link

풀이

서치 쿼리 트래킹 기능에 DOM-based XSS 취약점이 있다. document.write 함수를 통해 화면에 써진다. alert을 띄우라.

검색 쿼리를 입력한 뒤 Search 버튼을 누르면 search 파라미터로 전달된다. 또한 화면에 입력값이 출력된다. 하지만 출력 값은 HTML 인코딩되어 XSS 되지 않는다.

하단에 첨부된 스크립트를 읽어보면 다음과 같다. search 쿼리값을 경로에 포함한 이미지를 DOM에 추가한다. 이를 통해 이미지에 접근하고, 쿼리를 통해 어떤 값을 입력했는지 추적할 수 있다.

하지만 query에 필터링을 하지 않은 채로 문자열이 포함된다. img 태그를 나와 <script>alert(1)</script> 를 끼워넣으면 XSS가 성립된다.

"><script>alert(1)</script>// 를 페이로드를 입력하면 문제가 풀린다.

이 취약점은 사용자가 입력한 값을 검증하지 않고 그대로 DOM을 구성하는 데 사용하여 발생하였다. 위험한 document.write()를 직접 이용한 것도 문제를 만드는 데 일조하였다.


tags: writeup, xss, dom-based-xss, wstg-clnt-01, document-write, web hacking