Hacking/WebHacking.kr

Webhacking.kr : old-24 (100 pt)

newbie22 2021. 1. 22. 16:40

 

문제 접속하면 다음과 같은 화면이 나타납니다.

 

 

-> 사용자의 IP과 user-agent를 출력해줍니다.

-> source가 주어집니다.

 

코드를 보면 다음과 같습니다.

 

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?>

... html 생략 ...

<?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>";
  }
?>

 

-> 코드를 보면 extract($_COOKIE); 가 있는 것을 확인할 수 있습니다.

-> extract 함수 취약점을 묻는 문제 같습니다.

-> ip 값은 $REMOTE_ADDR의 값으로 저장합니다.

-> 또한 ip 값은 str_replace로.. , 12 , 7.  , 0. 각각 한 번씩 필터링합니다.

 

따라서 REMOTE_ADDR라는 쿠키를 생성하고 해당 쿠키의 값을 112277...00...00...1로 주어지면 해결할 수 있습니다.

 

str_replace 필터링 과정

112277...00...00...1 => str_replace .. to . => 112277...00...00...1 => 112277..00..00..1

112277..00..00..1 => str_replace 12 to   => 112277..00..00..1 => 1277..00..00..1

1277..00..00..1 => str_replace 7. to  => 1277..00..00..1 => 127.00..00..1

127.00..00..1 => str_replace 0. to  => 127.00..00..1 => 127.0.0.1

 

F12 -> Application

 

-> 이렇게 입력하고 새로고침을 하면 문제가 해결됩니다.

 

 

 

끝~~