문제를 읽어보면 사용자의 정보를 조회하는 API 서버로,
Path Traversal 취약점을 이용하여 flag를 획득하는 문제이며 flag는 /api/flag에 있다.

처음 접속화면이다.

Get User Info에 접속하면 다음과 같이 userid를 입력할 수 있고, guest가 이미 입력되어있다.

view 버튼을 누르면 userid에 입력한 사용자의 userid, level, password의 info가 출력된다.
guest의 level은 1, password는 guest임을 알 수 있다.

admin의 info를 살펴보면, level은 9999이고 password는 admin이다.

이는 주어진 파이썬 파일에서도 확인할 수 있다.
path traversal 취약점이 무엇인지 찾아보니,
디렉토리, 파일 등에 접근하는 것에 대한 검증이 없기 때문에 발생하는 취약점이라고 한다. 상대경로(../)를 사용해 접근한다고 한다.

문제에도 나와있듯이, flag는 /api/flag에 저장되어 있다.

바로 접속하는 것은 당연히 안된다.

파이썬 코드에서 get_info() 부분을 살펴보면
현재 /api/user에 있으며, {API_HOST}/api/user/{userid}로 받는 것을 확인할 수 있다.
게다가 따로 상대경로('..', '/', '\' 문자열)에 대한 필터링도 없다.
따라서 Get User Info 페이지에서 userid에 입력하는 값을 ../flag로 하면 결국 /api/flag에 접근할 수 있게 될 것 같다.
(../ -> 부모 디렉토리로 이동, 즉 /api로 이동 후 /flag로 이동)

근데 바로 입력했더니 순간적으로 undefined라고 뜨면서 해결되지 않았다.
뭔가 막혀있는 것 같으니 burp suite를 이용해본다.

burp suite에서 intercept 후 userid값을 ../flag로 변경하고,

forward해주면 flag를 얻을 수 있다.
DH{8a33bb6fe0a37522bdc8adb65116b2d4}