Level 24
<? extract($_SERVER); extract($_COOKIE); if(!$REMOTE_ADDR) $REMOTE_ADDR=$_SERVER[REMOTE_ADDR]; $ip=$REMOTE_ADDR; $agent=$HTTP_USER_AGENT; if($_COOKIE[REMOTE_ADDR]) { $ip=str_replace("12","",$ip); $ip=str_replace("7.","",$ip); $ip=str_replace("0.","",$ip); } 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(); } else { echo("<p><hr><center>Wrong IP!</center><hr>"); } ?>
ip가 "127.0.0.1"이면 문제가 풀린다. $ip
에는 $REMOTE_ADDR
값이 들어가고 $agen
에는 $HTTP_USER_AGENT
값이 들어간다.
Fiddler를 이용해서 User-Agent값을 수정하여 보냈더니
위 처럼 나타났다. 그러면 ip값은 어떻게 가져올까...
코드를 좀더 살펴보니 $_COOKIE안에서 REMOTE_ADDR 을 가져오는 것 같다.
Cookie값에는 PHPSESSID 값 뿐이 없다. 그래서 혹시나 속는셈 치고 REMOTE_ADDR을 넣어봤다.
Olleh!!!
그런데 원하는 결과는 나오지 않았다.
if($_COOKIE[REMOTE_ADDR]) { $ip=str_replace("12","",$ip); $ip=str_replace("7.","",$ip); $ip=str_replace("0.","",$ip); }
위 코드에서 문자를 치환시키는 것 같다. 따라서 저 조건과정을 거쳐서 완성된 IP가 127.0.0.1이 되면 될 것 같다.
112277..00..00..1 ➡️ 12를 치환 ➡️ 1277.00..00..1
1277..00..00..1 ➡️ 7. 을 치환 ➡️ 127.00..00..1
127.00..00..1 ➡️ 0. 을 치환 ➡️ 127.0.0.1
REMOTE_ADDR=112277..00..00..1
을 추가