문제를 클릭하면 위처럼 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 |