본문 바로가기

보안공부/Webhacking.kr 풀이

webhacking.kr 24번 문제 풀이 - FILTERED LOCALHOST

WEBHACKING.KR 24번 문제 풀이

[ FILTERED LOCALHOST ]


오늘은 webhacking.kr의 24번 문제를 풀어보자.


이 페이지의 프론트엔드 코드를 확인해보니

index.phps 파일에 소스가 있다고 한다.

그럼 이제 그 코드를 분석해보자.


extract($_SERVER);
extract($_COOKIE);

$_SERVER와 $_COOKIE를 접두사(배열명) 없이 사용할 수 있게 해준다.

if(!$REMOTE_ADDR) $REMOTE_ADDR=$_SERVER[REMOTE_ADDR];

$REMOTE_ADDR이 존재하지 않으면 현재 접속된 IP를 값으로 지정한다.

$ip=$REMOTE_ADDR;
$agent=$HTTP_USER_AGENT;

$ip값을 $REMOTE_ADDR로 설정해주고, 현재 접속한 클라이언트의 USER-AGENT를 $agent로 설정해준다.

if($_COOKIE[REMOTE_ADDR])
{
$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);
}

만약 REMOTE_ADDR라는 쿠키가 존재한다면, 12. | 7. | 0. 를 지운 값을 $ip 값으로 지정해준다.

echo("<table border=1><tr><td>client ip</td><td>$ip</td></tr><tr><td>agent</td><td>$agent</td></tr></table>");

결과값인 $ip와 $agent를 표로 띄워준다.

if($ip=="127.0.0.1")
{
@solve();
}

else
{
echo("<p><hr><center>Wrong IP!</center><hr>");
}

$ip값이 127.0.0.1이라면 해결되고, 아니라면 Wrong IP!를 띄운다.


이제 코드를 분석했으니 풀이를 해보자.


위의 코드에서 _SERVER와 $_COOKIE를 접두사(배열명) 없이 사용할 수 있게 해주었기 때문에, 둘이 혼용도 가능하다.

따라서, $_SERVER[REMOTE_ADDR] 과 $_COOKIE[REMOTE_ADDR]을 모두 $REMOTE_ADDR로 처리된다.


우리가 접속한 IP를 바꿀순 없으니 쿠키값으로 오버라이드해보자.


REMOTE_ADDR라는 쿠키값에 127.0.0.1을 넣으면


상단에 정의 되어있는 필터에 의하여 1로 바뀐다.


따라서 저 필터링에 걸리지 않으려면 두번씩 쓰면 된다.

저 필터는  12. | 7. | 0. 를 지운값을 저장하기 때문에 112277..00..00..1 으로 하면 우회할 수 있게된다.


이렇게 등록하고 새로고침 해주면 풀이에 성공한다.




WEBHACKING.KR 24번 문제 클리어!