Portswigger-DOM XSS in innerHTML sink using source location.search

problem link

풀이

innerHTML을 이용하여 컨텐츠를 변경하고 있다. XSS를 통해 alert를 띄우라.

검색 창에 검색을 하면 GET 파라미터 search에 값이 설정되고, 화면에 입력값이 출력된다.

검색 페이지의 스크립트를 살펴보면 다음과 같은 코드가 있다. 이는 searchMessage라는 id를 가진 태그의 내부 내용을 search 파라미터 값으로 변경한다.

searchMessage는 검색 쿼리가 반사되는 곳이다.

필터링 없이 innerHTML을 이용하여 넣지만 <script>alert(1)</script> 페이로드로는 작동하지 않는다. HTML5 스펙에서는 innterHTML로 넣은 script 태그는 동작하지 않도록 되어있다. HTML5 스펙

따라서 img 태그 등의 우회를 사용한다.

<img src=1 onerror=alert(1)> 와 같은 페이로드를 이용하면 문제가 풀린다.

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


tags: writeup, xss, dom-based-xss, wstg-clnt-01, innerHTML, web hacking, event handler