[Relative Path Overwrite]
Relative Path Overwrite(RPO)는 주로 서버와 브라우저가 상대 경로를 해석하는 과정에서 발생하는 차이점을 이용하는 공격이다.
url rewrite 기능을 사용하면 웹 어플리케이션 스크립트명 이하의 경로를 별도로 지정해도 같은 페이지가 조회되는 경우가 존재한다. 예를 들어 `/index.php/somepath`와 같이 스크립트명 하위로 새로운 경로를 지정해도 서버는 이를 `/index.php`를 참조하도록 구현되어 있는 경우다.
만약 스크립트의 src를 상대 경로로 로드하는 경우, `/index.php/somepath`에 의해 로드 경로가 조작될 수 있다.
[공격 예시]
어떤 공격에 대한 방어를 위한 script 파일을 로드하는 경우가 있다. 이 경우, RPO에 의해 로드가 방해되면서 방어 기법을 무력화시킬 수 있다.
예를 들어, `aaa.com/test.php` 페이지에서 `<script src='defense.js'></script>`를 로드할 때, 이는 `test.php`를 파일로 인식하여 웹 루트 페이지에서 `defense.js`를 로드할 수 있다. 하지만 `aaa.com/test.php/`와 같이 trailing slash가 포함된다면 test.php를 폴더로 인식하여 `test.php/config.js`로 로드를 시도하기 때문에, 로드에 실패하게 된다. 즉, 방어 기법이 무력화되게 된다.
[대응 방안]
로드하는 소스의 경로를 절대경로로 맞춰주면 위와 같은 공격을 방지할 수 있다.
[관련 자료 및 출처]
https://dreamhack.io/lecture/courses/575
Dreamhack | 강의 | Dreamhack
dreamhack.io
https://dreamhack.io/wargame/challenges/440
Relative Path Overwrite Advanced
Description Exercise: Relative Path Overwrite의 패치된 문제입니다. 문제 수정 내역 2023.08.10 bot.py 수정, Dockerfile 제공
dreamhack.io
https://dreamhack.io/wargame/challenges/439
Relative Path Overwrite
Description Exercise: Relative Path Overwrite에서 실습하는 문제입니다. 문제 수정 내역 2023.08.10 bot.py 수정, Dockerfile 제공
dreamhack.io
https://dreamhack.io/wargame/challenges/48
Guest book v0.2
php로 개발 중인 방명록 서비스입니다. 글을 쓰는 기능과, 오류가 발생하는 주소를 관리자가 확인할 수 있도록 하는 Report기능이 존재합니다. 플래그는 관리자의 쿠키에 포함되어 있습니다. 0.1 버
dreamhack.io
'웹 해킹 > 개념 노트장' 카테고리의 다른 글
DOM Clobbering (1) | 2024.12.30 |
---|---|
[Tip] CodeQL 간단 사용법 (0) | 2024.12.30 |
Web Cache Deception (0) | 2024.12.26 |