본문 바로가기
Wargame Write-Up/Webhacking.kr

[Webhacking.kr] (Web) 24번 풀이 (old-24)

by snwo 2020. 4. 4.

나의 아이피를 보여주고, 잘못된 아이피라 나온다.


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

$REMOTE_ADDR, $HTTP_USER_AGENT 헤더를 가져와, 

useragent 는 그냥 출력해주고, 

ip주소는 

 

.. -> .

12 -> ""

7. -> ""

0. -> ""

 

이렇게 필터링 해서 출력해준다.

이때 필터링된값이 127.0.0.1 이 되면 문제가 풀리는것이다.


필터링했을때 127.0.0.1 이 나오게 문자열을 우회해보자.

112277....00....00....1 이렇게 입력할면 필터링했을때

 

>>> a="112277....00....00....1"
>>> a=a.replace("..",".")
>>> a=a.replace("12","")
>>> a=a.replace("7.","")
>>> a=a.replace("0.","")
>>> a
'127.0.0.1'

127.0.0.1 로 나온다.


그렇다면 $REMOTE_ADDR 을 조작해야하는데, 

extract($_SERVER) 으로 값을 가져오면, 조작하는게 쉽지가 않다.

 

하지만 밑에 extract($_COOKIE) 로 쿠키도 가져오니, 

$_SERVER 의 $REMOTE_ADDR 값을

$_COOKIE 의 $REMOTE_ADDR 으로 덮어쓸 수 있다.


새 쿠키를 만든뒤,

 

제대로 생성된걸 확인하고, 체크한뒤, 새로고침!