Wargame/Webhacking.kr
webhacking.kr - old 24 (function_extract)
G_OM
2024. 3. 12. 15:41
문제화면이다.
view-source를 통해 코드를 봐보자.
<?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>
client ip 가 127.0.0.1 이면 문제가 풀리는 거 같다.
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);
}
중요한 부분을 간추려서 본다면
'extract($_COOKIE);' : 쿠키에서 변수를 추출하여 현재의 변수로 만듦
'$ip = $REMOTE_ADDR;' 사용자의 IP를 출력시킴
쿠키를 이용해서 REMOTE_ADDR 를 만들어 Client ip를 바꿔보자.
'127.0.0.1' 값을 입력했지만 필터링에 의해 1 로 만 출력되는 걸 볼 수 있다.
그러면 필터링을 받아도 '127.0.0.1' 이 나오게 해 보자.
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);
}
str_replace를 보면 연속된 점 '..' , '12', '7.' , '0.'를 필터링시켜 제거해 버린다.
연속된 점은 '.'으로 변환한다.
17.277... 00... 00... 1 -> '7.' 제거[1277....~] -> '7.' 제거[127.. 00~] -> '..'은 '.'로 변환[127.00...00...1] -> '0.' 제거[127.0..00...1] -> '..' 은 '.' 로 변환[127.0.00...1] -> '0.' 제거 [127.0.0...1] -> '..' 은 '.' 로 변환 [127.0.0.1]