본문으로 바로가기

pathtraversal 문제 풀이

category 모의해킹/Dreamhack Wargame 2025. 5. 15. 18:40
728x90

문제 설명

사용자의 정보를 조회하는 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