개인공부/드림핵

what-is-my-ip

Kevin Seo 2024. 12. 31. 23:00

이번 문제의 경우 /flag 경로에 있는 FLAG를 획득하는 문제이다.

 

[문제 해결]

1. 문제 파일 분석

 

이 코드에서 중요한 부분은 2가지로 나눌수 있다.

 

우선 1번 코드 분석은 아래와 같다.

request.access.route[0]

= 클라이언트의 IP 주소 리스트를 반환하며 HTTP 헤더에서 X-Forwarded-For 부분을 기반으로 생성

= 여기서 X-Forwarded-For란 프록시, CDN 등을 통하여 클라이언트가 요청을 보낼 경우 해당 CDN, 프록시 IP가 아닌 원본 요청 IP를 보여준다.

 

request.remote_addr 

= 요청을 보낸 클라이언트 IP 주소

 

그러므로 만일 X-Forwarded-For IP가 존재 할경우 해당 IP, 존재하지 않을 경우 클라이언트 IP를 user_ip 변수에 저장하라는 의미이다.

 

2번 코드의 경우 user_ip를 출력하는 명령을 쉘에서 실행하라는 의미이다.

 

이 코드에는 취약점이 존재하는데 바로 X-Forwarded-For 값의 경우 조작될 수 있지만 이를 검증하는 코드가 존재하지 않는 다는 것이다.

 

이를 이용하여 FLAG 획득을 진행한다.

 

2. Exploit