Web Hacking/webhacking.kr 풀이

old-24 write-up

박연준 2024. 1. 8. 01:56

문제 정보

https://webhacking.kr/challenge/bonus-4/

 

Challenge 24

agentfacebookexternalhit/1.1; kakaotalk-scrap/1.0; +https://devtalk.kakao.com/t/scrap/33984

webhacking.kr

 

풀이

 

문제에 접속하면 다음과 같이 client ip 와 agent 폼이 보이고 그 밑에는 Wrong IP라고 한다.

 

아래는 view-source를 눌렀을 때 나오는 소스 코드이다. 소스 코드를 딱 봤을 때 처음 view-source를 누르기 전인 client ip와 agent를 echo를 통해서 보여주고 있다. 또 그 아래에는 ip가 127.0.0.1일 때 solve(24)를 통해서 문제를 풀 수 있다고 나와있다.

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

 

ip를 127.0.0.1로 바꿔줘야 한다. 우선 소스 코드를 쭉 살펴보면 extract 함수는 배열 속의 키값을 변수화 시켜주는 함수라고 한다. 그리고 ip라는 변수를 선언하고 htmlspecialchars 함수를 통해서 REMOTE_ADDR의 값을 HTML 엔티티로 변환시켜준다. 또한 str_replace 함수를 통해서 ip 변수의 문자열에 대해서  ..은 .으로 강제 변환하고, 12, 7, 0은 아예 없애버리는 것을 알 수 있다.

 

여기서 extract 함수를 주의 깊게 살펴보아야 한다. extract 함수는 배열 속의 키 값을 변수화 시켜주는 함수라고 설명했다. extract($_SERVER)는 $_SERVER의 배열의 모든 키 값을 변수화 시켜주는데 여기서 $_COOKIE의 배열도 변수화 시켜주는 것을 알 수 있다.

 

따라서 $_SERVER[REMOTE_ADDR]은 $REMOTE_ADDR로 변환되고, $_SERVER[HTTP_USER_AGENT] 를 $HTTP_USER_AGENT로 변환된다. 이처럼 쿠키에 있는 REMOTE_ADDR의 키 값이 존재한다면 $REMOTE_ADDR로 변수화 시켜주는 걸 알 수 있다. 

 

이제 쿠키에 REMOTE_ADDR이라는 변수를 추가해서 $ip라는 값으로 대체해서 127.0.0.1로 변환 시켜주면 되는데 replace함수를 우회해야 한다. replace 함수는 중복된 값에 대한 제거는 하지 않는다. 따라서 다음과 같이 우회가 가능하다.

12와 7이 강제 제거되기 때문에 112277로 작성하고 0은 00으로 .은 ...으로 사용하는 이유는 먼저 htmlspecialchars 함수를 통해 HMTL 엔티티 코드로 변환 시키고 .은 &#46;으로 변환된다. 따라서 ...으로 작성해서 ..으로 변환시키고 다시 .으로 변환해서 127.0.0.1을 만들 수 있다. 

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

 

이를 쿠키 변수에 추가해서 다시 요청해보면 다음과 같이 문제를 풀 수 있다.

 

'Web Hacking > webhacking.kr 풀이' 카테고리의 다른 글

old-16 write-up  (0) 2024.01.10
old-17 write-up  (0) 2024.01.10
old-18 write-up  (0) 2024.01.10
old-26 write-up  (0) 2024.01.08
old-54 write-up  (0) 2024.01.08