CTF & Wargame(WEB)

RPO(Relative Path Overwrite) 이해하기

KWAKBUMJUN 2025. 4. 21. 07:21

level 2 Relative Path Overwrite 문제에서 

http://host/?page=vuln&param=on

이라고 입력했을 때는 filter.js가 정상적으로 로드되어 필터링이 되고

 

http://host/index.php/?page=vuln&param=on

이라고 입력했을 때는 filter.js가 정상적으로 로드되지 않아 필터링도 적용되지 않는 이유는

<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') {
        param = "nope !!";
    }
    else {
        for (var i = 0; i < filter.length; i++) {
            if (param.toLowerCase().includes(filter[i])) {
                param = "nope !!";
                break;
            }
        }
    }

    param_elem.innerHTML = param;
</script>

이 코드에서 filter.js를 상대 경로인 /filter.js 로 로드하고 있기 때문이다. 

 

위에서 말한 내용을 이를 기반으로 다시 설명하면

http://host/?page=vuln&param=on은 현재 문서가 /(루트)라고 보고 filter.js를 요청하기 때문에 정상적으로 로드가 된다.

하지만

http://host/index.php/?page=vuln&param=on은 현재 문서가 /index.php/라고 보고, filter.js를 요청한다. 하지만 /index.php/에는 filter.js가 없기 때문에 로드를 실패한다.

 

 

'CTF & Wargame(WEB)' 카테고리의 다른 글

level 3 XS-Search  (0) 2025.04.22
level 2 Relative Path Overwrite Advanced  (0) 2025.04.21
level 2 Relative Path Overwrite  (1) 2025.04.18
level 3 CSS Injection  (0) 2025.04.18
level 2 Client Side Template Injection  (0) 2025.04.18