DOM XSS : LAB [1]

DATE : 2024/1/8

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

이번 문제는 LAB으로 들어가면 블로그를 찾아볼 수 있는 검색 기능이 제공된다.

검색 바를 사용해보니 위와 같이 검색 결과가 없다는 문구와

search parameter에 사용자가 입력한 값이 들어가는 걸 확인할 수 있었다.

이때 검색 결과를 알려주는 문구가 어떻게 만들어지는 지 Response를 확인해보니

<script>로 다음과 같은 코드를 볼 수 있었다.

function trackSearch(query) {
    document.write('<img src="/resources/images/tracker.gif?searchTerms='+query+'">');
}
var query = (new URLSearchParams(window.location.search)).get('search');
if(query) {
    trackSearch(query);
}

이 코드는 URL 속에 search parameter로 전달된 값을 query에 넣어

document.write()를 실행하라는 내용이다.

<img src="/resources/images/tracker.gif?searchTerms='+query+'">

query가 들어가는 위치를 고려해보았을 때, 스크립트를 삽입하기 위해서는

(1) <img> tag 마무리

(2) <script> tag 삽입

(3) 뒤에 남는 script 주석 처리

3가지 내용을 만족 시켜야 한다.

(1)~(3)번 내용을 만족 시키기 위해 위와 같이 search parameter를 입력하게 되면

document.write('<img src="/resources/images/tracker.gif?searchTerms='">';
    <script>alert(1)</script>
//'">');

위와 같이 document.write() 안에 <script> tag가 들어가게 되면서

LAB의 목표대로 팝업 창을 띄울 수 있게 된다.

Last updated