본문 바로가기

WarGame/Webhacking.kr

old-24

문제 접속 시,

클라이언트의 IP와 Agent가 출력되면서,

IP가 틀렸다는 Wrong IP! 문구가 출력되는 것을 볼 수 있다.

view-source 버튼을 통해 소스코드를 살펴보니

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

접속한 클라이언트의 IP가 127.0.0.1여야만 문제가 풀리는 것을 확인할 수 있었다.

$ip = $REMOTE_ADDR;

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는 REMOTE_ADDR라는 변수의 값을 취한다.

그리고 REMOTE_ADDR 값은 str_replace를 통해 값이 필터링되고 있다.

REMOTE_ADDR 값을 127.0.0.1으로 변조시키는 것이 포인트이다.

extract($_COOKIE);

문제 코드 중

쿠키에 있는 Key:Value 배열의 값들을 변수화 시켜주는 extract 구문을 확인할 수 있었다.

쿠키 값은 사용자가 임의로 추가하거나 변조할 수 있으므로

쿠키를 사용해 REMOTE_ADDR 이름의 쿠키의 값을 127.0.0.1으로 변조할 수 있다고 생각했다.

해당 문제 페이지에 요청하는 http 헤더의 쿠키 값은

현재 PHPSESSID 값만이 존재한다.

REMOTE_ADDR라는 이름의 127.0.0.1의 값을 갖는 쿠키를 추가해 줬더니

출력되는 클라이언트 IP가 현재는 필터링 돼 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);
}

REMOTE_ADDR=17.277...00...00...1

필터링 되고 있는 값을 우회하여 REMOTE_ADDR 값을 작성한 후

쿠키 값에 담아 요청을 보내보니,

성공적으로 클라이언트 IP가 127.0.0.1로 출력되며

문제 풀이에 성공했다는 알림창을 볼 수 있다.

더보기
<?php
extract($_COOKIE)
$1 = $PHPSESSID
$2 = $REMOTE_ADDR

echo $1 // mb3bttesms5s2b9d28pkmenrso
echo $2 // 127.0.0.1
?>

'WarGame > Webhacking.kr' 카테고리의 다른 글

old - 54  (2) 2024.06.04
old-15  (0) 2024.06.04