본문 바로가기

Security

[Webhacking] [client-side advanced] Exploit Techniques - Relative Path Overwrite (RPO)

반응형

Relative Path Overwrite

Browser를 속여 의도되지 않은 파일을 불러오는 기법

  • 절대 경로와 상대 경로 이해.

  • / (루트 도메인) 로 부터 시작되는 경로

  • 파일명만 존재할 시 현재까지의 경로에서 파일명만 교체됨.

 

Browser가 하는 일 

웹 서버와 통신 하면서 응답을 브라우저를 통해서 보여준다.

응답코드에 Image나 Script, Stylesheet 파일들을 불러오는 코드가 존재하면 browser 판단 하에 파일을 불러옴.

웹서버는 경로에 대해 찾아서 파일을 응답함.

index.php 응답 코드에 css , js 로드 코드가 존재함.

상대경로로 지정되어 있으므로 현재 경로에서 찾음.

URL 조작하여 request

브라우저는 URL encode된 부분도 그냥 파일명에 포함시킴.

Apache또한 ..%2index.php를 찾지만 Nginx에서는 변환되어 정상 파일 응답함.

만약 정상 응답되었다고 하면 응답 코드에 있는 자원을 로드하는 것은 브라우저 경로 기준. (브라우저 판단)

브라우저는 URL encode 변환이 안되므로 ..%2로 들어간 부분은 파일명으로 들어가서 

같은 index.php를 불러와도 (웹서버 기준) 리소스 (CSS , JS ) 로드 경로는 바뀐다.

 

/test/rpo/ 하위에서 리소스 로드

index.php는 서버에서 해석하므로 정상 리턴됐지만, script 반환은 브라우저 경로 기준으로 로드하려고 하기때문에

404에러 발생.

Apache 도 URI encode 인식못하므로 404

 

만약 어떤 경로에 감염된 스크립트가 있단 것을 아는 상황.

그냥 경로 참조로 접근하면 소스로 반환됨.

실행시키고 싶다면 

/test/rpo/uploads/ 하위에서 script.js를 load하는 php 파일등을 심어서 실행시키면됨.

반응형