Web/Dreamhack

[Dreamhack wargame] - what-is-my-ip

Claude97 2024. 10. 18. 12:03

그들은 우리가 벽 뒤에 있음에도 어케 알까...? 라는 설명이 적혀있다.

들어가면 현재 IP(인 듯한) 를 알려주는 페이지가 나온다.

소스코드를 보면

user_ip 에 request.access_route[0] 값을 받아서 저장한 후에,

/bin/bash -c "echo {user_ip}" 명령을 실행한다.

우리는 Flag 파일이 /flag 에 위치하고 있다는 것을 알기에,

직접 user_ip 에 값을 집어넣는 취약한 부분을 이용하면 될것 같다.

 

일단 request.access_route 와 request.remote_addr 함수를 알아보자.

request.access_route 명령어는

client IP 부터 마지막 프록시 서버까지의 모든 IP 리스트를 보여주는 역할을 하는 것을 알 수 있고,

request.access_route[0] 의 의미는 제일 첫번째 단에 있는, 맨 처음 시작되는 IP 를 가르키는거 같다.

해당 쿼리 변조에 대해서도 찾아보니, X-Fowerded-for 헤더가 원래의 IP 를 알려주는 역할을 한다는걸 알았다.

Burp suite 를 이용해서 X-Forwarded-For 헤더에 1; cat /flag 를 추가하여

결과적으론 /bin/bash -c "echo 1; cat/ flag" 을 실행시켜서 flag 를 얻을 수 있었다.

 

참고)

https://tedboy.github.io/flask/generated/generated/flask.Request.html