webhacking.kr 24번 문제풀이 Write Up 입니다.
client ip와 agent 정보가 나오고, 잘못된 IP라고 뜹니다.
소스코드입니다. PHP 영역만 따로 빼서 분석해 보겠습니다.
<?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>";
}
?>
접속IP가 127.0.0.1이면 문제가 해결되는 것 같습니다.
그러나, IP는 str_replace()에 의해 필터링되고 있고, IP정보는 어떻게 속여서 전송해야 할지도 생각해야 합니다.
일단 str_replace() 먼저 해결해봅니다.
str_replace([변경 대상 문자열], [변경할 문자열], [해당 문자열]) 이런 구조로 이루어져 있습니다.
이 함수의 취약점은, 필터링 후 남은 문자로 재조합이 가능하다는 것입니다.
예를 들어 admin이 str_replace("admin", "", $str) 이렇게 필터링 된다고 가정해보겠습니다.
그냥 admin으로 전송하면 당연히 필터링되겠지만,
adadminmin 이런식으로 전송하면 adadminmin에서 가운데 admin만 날아가게 됩니다.
이렇게 되면 남은 문자열로 admin 재조합이 가능합니다.
이 원리를 이용해서 127.0.0.1을 전송해 보겠습니다.
'..' -> '.' | '12' '7.' '0.' -> ''
이렇게 필터링되고 있습니다.
112277...00...00...1 이렇게 전송하면 str_replace() 후 127.0.0.1이 됩니다.
이제 IP를 어떻게 속일지 생각해야 합니다.
코드를 보면 $ip = $REMOTE_ADDR; 부분 위에
extract($_SERVER);
extract($_COOKIE);
이 두 줄이 보입니다.
해당 함수는 extract() 함수인데, 배열 속의 키 값을 변수로 만들어주는 역할을 합니다.
$a[a] = '1';
$a[b] = '2';
extract($a); 라고 정의했을 때,
echo $a;
echo $b; 의 출력값은 1 2가 됩니다.
extract() 함수는 잘못된 위치에 작성하면 기존 변수를 덮어씌는 취약점이 있습니다.
이를 문제에 활용하면, extract($_COOKIE)를 호출했으므로 쿠키를 변조하면 IP를 속일 수 있습니다.
쿠키 관리하는 Extension이 작동을 안 해서, Chrome 개발자도구로 직접 추가했습니다.
IP를 받아오는 변수는 REMORE_ADDR이므로, 쿠키 이름을 REMORE_ADDR로 하고 값을 112277...00...00...1로 하면 됩니다.
IP가 127.0.0.1이 되면 문제가 정답처리 됩니다.
'CTF > webhacking.kr' 카테고리의 다른 글
[CTF] webhacking.kr 23번 Write-Up (0) | 2022.10.18 |
---|---|
[CTF] webhacking.kr 20번 Write-Up (0) | 2022.10.15 |
[CTF] webhacking.kr 19번 Write-Up (0) | 2022.10.15 |
[CTF] webhacking.kr 18번 Write-Up (0) | 2022.10.14 |
[CTF] webhacking.kr 17번 Write-Up (0) | 2022.10.14 |
댓글