문제 설명
사용자의 정보를 조회하는 API 서버입니다.
Path Traversal 취약점을 이용해 /api/flag에 있는 플래그를 획득하세요!
문제 풀이
Path Traversal 취약점을 이용하라니까 경로를 조작하는 문제임이 확실하다.

/api/flag에 flag가 있다니까 웹에서 바로 경로 조작을 해본다.

흠 401 에러가 뜬다.
코드를 한 번 살펴보자.

/get_info 경로에서 POST 요청이 들어오면,
입력된 값 user_id를 가져오고 외부 API({API_HOST}/api/user/{userid})에 GET요청을 보낸다.

여기가 그 GET 요청을 받은 외부 API 코드다.
uid 키를 가지고 users 딕셔너리에서 정보를 찾는데, 없는 키는 빈 딕셔너리를 반환한다.

그리고 flag가 출력되는 API가 있다.
웹에서 URL 경로조작으로 이걸 노렸는데, 안되는거 까비

이번엔 userid에 ../flag를 넣어줬다.
없는 키 값이다보니 {} 빈 딕셔너리를 반환해준다.
아직 잘 모르겠으니 버프 스위트를 가져와보자.

userid가 0이므로, guest에 대한 info가 출력되고 있다.
여기서 이 userid를 조작해준다면?

엇 flag가 출력되었다.
뭔가 얼렁뚱땅하게 일단 해결은 하긴 했지만, 의문점이 든다.
왜 웹에서는 안되고 버프스위트에서는 된거지 ...?
그 이유는, 브라우저 입력은 HTML Form 처리를 거치기 때문이다.
HTML 폼에서는 사용자가 ../flag를 입력해도
- 브라우저가 자동으로 URL 인코딩을 수행하거나,
- 백엔드 Flask가 request.form.get() 처리 시 ../flag가 평문 그대로 전달되지 않을 수 있다.
브라우저나 자바스크립트가 ..를 제거하거나, 특수문자를 인코딩하거나, form 필드에서 제한이 걸릴 수 있다는 것이다.
하지만 버프 스위트에서는 원시 HTTP 요청 조작이 가능하기 때문에 경로 우회가 가능하다.
한줄평: 역시 버프 스위트는 체고다 !
'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글
| phpreg 문제 풀이 (1) | 2025.05.19 |
|---|---|
| ex-reg-ex 문제 풀이 (0) | 2025.05.19 |
| welcome 문제 풀이 (4) | 2025.05.13 |
| baby-linux 문제 풀이 (0) | 2025.05.01 |
| 64se64 문제 풀이 (0) | 2025.04.30 |