Hacking/WebHacking.kr
Webhacking.kr : old-24 (100 pt)
newbie22
2021. 1. 22. 16:40
문제 접속하면 다음과 같은 화면이 나타납니다.
-> 사용자의 IP과 user-agent를 출력해줍니다.
-> source가 주어집니다.
코드를 보면 다음과 같습니다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?>
... html 생략 ...
<?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($_COOKIE); 가 있는 것을 확인할 수 있습니다.
-> extract 함수 취약점을 묻는 문제 같습니다.
-> ip 값은 $REMOTE_ADDR의 값으로 저장합니다.
-> 또한 ip 값은 str_replace로.. , 12 , 7. , 0. 각각 한 번씩 필터링합니다.
따라서 REMOTE_ADDR라는 쿠키를 생성하고 해당 쿠키의 값을 112277...00...00...1로 주어지면 해결할 수 있습니다.
str_replace 필터링 과정
112277...00...00...1 => str_replace .. to . => 112277...00...00...1 => 112277..00..00..1
112277..00..00..1 => str_replace 12 to => 112277..00..00..1 => 1277..00..00..1
1277..00..00..1 => str_replace 7. to => 1277..00..00..1 => 127.00..00..1
127.00..00..1 => str_replace 0. to => 127.00..00..1 => 127.0.0.1
F12 -> Application
-> 이렇게 입력하고 새로고침을 하면 문제가 해결됩니다.
끝~~