문제를 클릭하면 위처럼 client ip와 agent 값이 출력되고 끝입니다. 소스를 확인해봅니다.

 

<?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와 $_COOKIE를 가져오는데 두 변수는 PHP 예약 변수로 각각 서버(혹은 실행환경)의 정보를 담고 있는 배열과 쿠키의 정보를 담고 있는 배열입니다. 그 후 ip에 REMOTE_ADDR 값을, agent에 HTTP_USER_AGENT 값을 넣어줍니다.

 그 뒤에 ip값을 특정 조건에 맞게 변환해준 뒤 해당 ip값이 127.0.0.1이면 solve를 호출하는 방식입니다. 이 문제의 취약점은 $_SERVER를 추출해온 뒤 $_COOKIE를 추출했다는 부분입니다. $_SERVER를 추출할때 REMOTE_ADDR값을 가져왔는데 $_COOKIE를 추출할때 쿠키 값에 똑같이 REMOTE_ADDR 값이 존재한다면 해당 값을 쿠키에 있던 값으로 덮어 씌웁니다.

 대충.. 이런느낌?

위와 같은 취약점 때문에 쿠키값에 REMOTE_ADDR 값을 넣고 위의 조건에 맞춰서 127.0.0.1이 되게 만들어주면 됩니다.

 

끝!

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

[Webhacking.kr] old-26  (0) 2019.10.22
[Webhacking.kr] old-25  (0) 2019.10.22
[Webhacking.kr] old-17  (0) 2019.10.22
[Webhacking.kr] old-16  (0) 2019.10.22
[Webhacking.kr] old-14  (0) 2019.10.22

+ Recent posts