WarGame/Webhacking.kr

[Webhacking.kr] old-24 Answer

Old-24 Domain & Tool

  • 구분 : PHP 코드 읽기
  • 문제풀이에 사용된 도구 
    • Chrome 103.0.5060.66 

Old-24 Question & Answer

접속하면 본인의 IP와 Agent를 보여준다. 동시에 Wrong IP가 나오는 것을 보아 IP를 바꾸는 문제일거 같은 느낌이 든다. 아래 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>

중간의 조건문을 보면 

  1. 문자열의 ".."을 "."으로 바꾼다
  2. 문자열의 "12"을 ""으로 바꾼다
  3. 문자열의 "7."을 ""으로 바꾼다
  4. 문자열의 "0."을 ""으로 바꾼다

일단 다 단일문자열을 바꾸는 것이 아닌것을 보아서 대충 잘 길게길게 이어쓰면 이거 127.0.0.1을 만들어 solve(24)를 호출할 수 있을 거 같다. 근데, 이 IP는 어떻게 전달해줄까?

 

위에 사용된 extract함수는 변수를 가져오는 함수이다. 가령 extract($_COOKIE)가 있다면 COOKIE에 "변수명" : "값" 을 넣으면 가져온다는 것이다.

 

근데, 이 변수명을 우리가 알고 있다면 당연히 덮어씌울 수 있다. 위 코드에서 $ip 는 $REMOTE_ADDR이 덮어씌우도록 되어있다. 즉 COOKIE에 REMOTE_ADDR변수값을 설정해서 파라미터를 전달하면 되겠다는 말이다. 조거문을 만족하는 문자열은 "112277...00...00...1"이다.

NICE!

'WarGame > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-26 Answer  (0) 2022.07.28
[Webhacking.kr] old-25 Answer  (0) 2022.07.28
[Webhacking.kr] old-23 Answer  (0) 2022.07.27
[Webhacking.kr] old-22 Answer  (0) 2022.07.27
[Webhacking.kr] old-21 Answer  (0) 2022.07.22