해당 문제에 접속하면 자신의 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 |