Web Hacking/Webhacking.kr

[Webhacking.kr] old-24 / challenge 24

ruming 2021. 10. 3. 23:09

해당 문제에 접속하면 자신의 ip와 agent가 나와있는 것을 알 수 있다.

Wrong IP!라는 문구가 뜬다.

아래에 있는 view-source url로 들어가 소스코드를 확인해보았다.

 

<?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>";
  }
?>

 

  extract($_SERVER);
  
extract($_COOKIE);

php에서 extract 함수는 배열 속의 키값을 변수화 시켜주는 함수이다.

여기서는 $_COOKIE가 변수화 될 것이다.

https://bbolmin.tistory.com/53

 

  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);
  }
 $ip 값을 필터링하고 있다. str_replace함수는 첫번째 인자를 두번째 인자로 대체한다.

*이미 치환한 경우 다시 바꾸지 않는다.


  if(
$ip=="127.0.0.1"){
    
solve(24);
    exit();
  }

$ip가 127.0.0.1이 되면 문제가 풀린다. 

 

REMOTE_ADDR이라는 이름의 쿠키값을 만들어 거기에 정보를 보내면 된다는 것을 알았다.

필터링을 우회하는 문제였다.

처음 시도했던 필터링 우회인데 str_replace함수의 특징을 제대로 이해하지 못해 실수했다.

17.27...07...07...1

이렇게 넣으면 결과가 12.1이 나오는데 7.을 치환해 없어지면 0과.이 합쳐져 다시 치환하기 때문이다.

 

두번째 시도

17.270...00...00...1

성공적으로 치환되어 문제를 해결할 수 있었다!

 

추가)

10.270...00...00...1

이 방법도 가능하다.

 

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

[Webhacking.kr] old-50 / Challenge 50  (0) 2021.10.10
[Webhacking.kr] old-03 / Challenge 3  (0) 2021.10.10
[Webhacking.kr] old-49  (0) 2021.09.26
[Webhacking.kr] old 35  (0) 2021.09.26
[Webhacking.kr] old-14  (0) 2021.09.20