
접속하면 사진과 같이 client ip와 agent가 나오고, 아래에는 Wrong IP!라는 문구가 나옵니다.
view source 링크가 있으므로 코드를 확인해 보겠습니다.
<?php
extract($_SERVER);
extract($_COOKIE);
$ip = $REMOTE_ADDR;
$agent = $HTTP_USER_AGENT;
if($REMOTE_ADDR){
$ip = htmlspecialchars($REMOTE_ADDR);
$ip = str_replace("..",".",$ip);
$ip = str_replace("12","",$ip);
$ip = str_replace("7.","",$ip);
$ip = str_replace("0.","",$ip);
}
if($HTTP_USER_AGENT){
$agent=htmlspecialchars($HTTP_USER_AGENT);
}
echo "<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";
if($ip=="127.0.0.1"){
solve(24);
exit();
}
else{
echo "<hr><center>Wrong IP!</center>";
}
?>
cookie와 server에서 extract 함수를 통해 변수를 생성합니다.
서버에서 REMOTE_ADDR과 HTTP_USER_AGENT 값을 받아옵니다. 여기서 extract($_COOKIE) 가 뒤에 위치하므로 이름이 REMOTE_ADDR이나 HTTP_USER_AGENT 라는 쿠키를 만들면 값을 변경할 수 있습니다.
사진처럼 쿠키를 통해 값을 변경할 수 있습니다.
문제에서 ip가 127.0.0.1이면 solve를 실행하므로 REMOTE_ADDR 쿠키를 통해 값을 변경하여 해결할 수 있습니다.
하지만 if($REMOTE_ADDR)에서 필터링이 있기 때문에 이를 우회하여 값을 넣어야 합니다.
조건은 ..을 .으로 바꾸고, 12, 7., 0.은 없애버립니다.
우회하는 값은 112277...00...00...1 등이 있습니다.