본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 24번

by Hevton 2020. 10. 5.
반응형

소스보기를 하면

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

이런 소스가 나온다.

 

여기서 중요하게 봐야할 것은 extract 함수다.

원래, php에서 아이피를 수집하는 변수의 형식은

$_SERVER[‘REMOTE_ADDR’] 이다.

하지만

extract($_SERVER); 를 하게 되면

본래

$_SERVER[‘REMOTE_ADDR’] 로 받아오던 값을

$REMOTE_ADDR 사용할  있게 된다.

 

키값을 변수명으로 사용하게 해주는 것이다. 

 

그리고 현재

extract($_SERVER);

extract($_COOKIE);

이런식으로 나열되어있다.

-> SERVER보다 COOKIE 나중에 호출되었으므로 덮어씌어질것임.

 

따라서

COOKIE 에 REMOTE_ADDR란 이름의 쿠키를 넣게 되면

위 소스에서 읽는 $ip 에는 쿠키의 REMOTE_ADDR 값이 들어가게 될 것이다.

 

문제에서 요구하는 값은 127.0.0.1인데, str.replace로 문자열 필터링을 해주고 있으니, 이를 적절히 우회해서 넣어주면 되겠다.

 

그리고 내가 만든 우회 값은

112277...00...00...1

 

따라서 쿠키 이름이 REMOTE_ADDR이고, 값이 112277...00...00...1인 쿠키를 생성해서 넣어준 뒤 새로고침을 해주면

 

 

 

 

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 26번  (0) 2020.10.05
[Webhacking.kr] 25번  (0) 2020.10.05
[Webhacking.kr] 23번  (0) 2020.10.03
[Webhacking.kr] 21번  (0) 2020.10.02
[Webhacking.kr] 20번  (0) 2020.09.30