문제에 처음 접속하면 테이블의 형태로 다음과 같은 화면을 볼 수 있고, 소스코드는 다음과 같다.

151004365-d7da5f7c-a431-4fcc-9528-259d238b41d1.png

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 24</title>
</head>
<body>
<p>
<?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>";
  }
?><hr>
<a href=?view_source=1>view-source</a>
</body>
</html>

문제를 해결하기 위해서는 %ip값이 127.0.0.1이면 해결이 되는데, extract() 함수에서 cookie값을 server값보다 늦게 보내주어, server 측에서 extract된 변수들을 변조해 덮어 쓸 수 있게 된다.

다음으로 쿠키에 준 값이 서버에서 어떤 식으로 필터링이 되는지 살펴보면

따라서 이를 우회하기 위해 쿠키값으로 112277...00...00...1 을 넣어 보내준다면 문제를 해결할 수 있다.