PatriotCTF 2024의 write-up이다.
description : I bet you can't access my notes on giraffes!
해당 문제에 들어가면 위와 같이 사이트에 접속 할 수 있다.
Hah! Bet you cant access my notes on giraffes! They're super secure!
문제에서는 "하하! 기린에 관한 제 노트에 접근할 수 없을 거예요! 정말 안전해요!"라고 말하고 있다.
<?php
$allowed_ip = ['localhost', '127.0.0.1'];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && in_array($_SERVER['HTTP_X_FORWARDED_FOR'], $allowed_ip)) {
$allowed = true;
} else {
$allowed = false;
}
?>
하지만 코드를 보면 전혀 안전하지 않다.
먼저 isset() 함수는 $_SERVER['HTTP_X_FORWARDED_FOR'] 값이 설정 되었는지 확인합니다. 설정되지 않은 경우(프록시를 거치지 않고 직접 연결된 경우) false를 반환한다. 그리고 allowed_ip 로 허용된 값들만 허용한다.
두 조건 모두 참이여야 참으로 반환한다.
curl -H "X-Forwarded-For: 127.0.0.1" http://chal.competitivecyber.club:8081/
그래서 curl을 이용해서 위와 같이 HTTP_X_FORWARDED_FOR를 적고, 127.0.0.1로 설정해서 해당 서버에 요청을 보내주면 flag를 획득할 수 있는 문제였다.
https://fir3cr4kers.xyz/blog/2024/patriotctf-2k24#impersonate---web