Wargame/Webhacking.kr

webhacking.kr - old 24 (function_extract)

G_OM 2024. 3. 12. 15:41

 

문제화면이다.

view-source를 통해 코드를 봐보자.

 

 

 

 

 

 

 

 

 

<?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>

 

 

client ip 가 127.0.0.1 이면 문제가 풀리는 거 같다.

 

 

 

 

 

 

 

 

 

 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);
  }

 

중요한 부분을 간추려서 본다면

 

'extract($_COOKIE);' : 쿠키에서 변수를 추출하여 현재의 변수로 만듦

'$ip = $REMOTE_ADDR;' 사용자의 IP를 출력시킴

쿠키를 이용해서  REMOTE_ADDR 를 만들어 Client ip를 바꿔보자.

 

 

 

 

 

 

 

 

 

'127.0.0.1'  값을 입력했지만 필터링에 의해 1 로 만 출력되는 걸 볼 수 있다.

 

그러면 필터링을 받아도 '127.0.0.1' 이 나오게 해 보자.

 

 

 

 

 

 

 

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);
  }

 

str_replace를 보면 연속된 점 '..' , '12', '7.' , '0.'를 필터링시켜 제거해 버린다.

 

연속된 점은 '.'으로 변환한다.

 

 

 

 

 

 

 

 

 

 

 

 

17.277... 00... 00... 1 -> '7.' 제거[1277....~] -> '7.' 제거[127.. 00~] -> '..'은 '.'로 변환[127.00...00...1] -> '0.' 제거[127.0..00...1]  -> '..' 은 '.' 로 변환[127.0.00...1] -> '0.' 제거 [127.0.0...1] -> '..' 은 '.' 로 변환 [127.0.0.1]