웹/webhacking.kr

webhacking.kr 24번

최경환의 해킹공부 2021. 2. 17. 04:38

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

24번을 들어가면 화면에 현재 접속 네트워크오 관련된 정보가 뜨면서 잘못된 ip라는 메시지가 뜨고 위의 소스코드를 확인할 수 있습니다.

 

코드를 살펴보면 ip주소가 127.0.0.1로 맞추어져 있으면 문제가 해결되는 것처럼 보이며 burp Suite를 통해 패킷의 정보를 위조해서 보내는 형식으로 문제를 풀어야 할것 같습니다. 그리고 ip주소를 확인하여 코드에 보이는 부분들을 수정해주는 부분이 있기 때문에 이 부분을 적당히 우회한 형식의 ip주소를 전달해주어야 하는 줄 알았으나...

 

아무리 봐도 burp suite에서 ip를 바꿀만한 부분이 보이지 않아서 다시 코드를 살펴보니 쿠키 값도 가져와서 사용하는 것이 보였습니다.

그래서 쿠키에 REMOTE_ADDR을 추가해서 갑을 1로 바꿔주니

1로 client ip값이 바뀐 것을 알 수 있습니다. 이제 치환 부분만 잘 우회하면 문제가 풀릴 것 같습니다.

이렇게 필터링 부분을 우회해주면 됩니다. 왜 저렇게 우회를 하는지에 대해서 간단히 설명하면

str_replace함수 같은경우에는 127을 치환할경우 127의 전체가 있을 경우에만 치환이 되게 됩니다. 그래서 121277이 있으면 12'127'7로 싱글쿼터로 닫혀있는 부분만 다른 문자로 치환되거나 값이 없어지게 되는것입니다. 그럴 경우 위에서 만약 127이 ''으로 치환된다면 사이의 127이 사라지고 겉의 127이 남게 되어 필터링이 되는 문자도 우회하가 가능하게 되는 것입니다. 이 원리를 이용해서 하나씩 결고값을 확인해가며 필터링을 우회한다면 어렵지 않게 문제를 풀 수 있습니다.