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