문제 페이지는 해당 페이지와 같다.
해당 페이지에는 client ip 주소와 agent 정보가 출력되는 표와 view-source 링크가 존재한다.
view-source 링크를 통하여 소스페이지를 확인한다.
마지막 부분의 조건문을 확인하면
if($ip=="127.0.0.1"){
solve(24);
exit();
}
출력되는 ip 정보가 127.0.0.1이 되면 문제가 풀리는 것을 확인할 수 있다.
소스페이지 중간의 php 부분을 중심으로 해석해 본다.
<?php
extract($_SERVER);
extract($_COOKIE);
$ip = $REMOTE_ADDR;
$agent = $HTTP_USER_AGENT;
extract() 함수는 배열 속의 키값을 변수화 시켜주는 함수이다.
이 함수에 $_SERVER를 적용하여 서버와 실행환경의 정보를 변수화 시키고, $_COOKIE 를 적용하여 쿠키값을 변수화 시킨다.
$ip 변수에 저장되는 $REMOTE_ADDR 은 웹 서버에 접속하는 사용자의 ip 주소를 가져온다.
$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);
}
$REMOTE_ADDR 값이 존재할 경우 if 조건문이 실행된다.
$REMOTE_ADDR 정보를 htmlspecialchars()함수를 통해 html 엔티티로 변환하여 $ip 변수에 저장한다.
$ip 변수의 '..' 문자를 '.' 으로 '12','7.','0.'을 공백으로 치환한다.
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>";
$HTTP_USER_AGENT 값이 존재한 경우 html 엔티티로 변환하여 $agent 값에 저장한다.
if($ip=="127.0.0.1"){
solve(24);
exit();
}
else{
echo "<hr><center>Wrong IP!</center>";
}
?>
해당 조건문을 실행하도록 하기 위해서는 $REMOTE_ADDR 값을 조작하여 $ip 변수가 127.0.0.1이 되도록 해야 한다.
<?php
extract($_SERVER);
extract($_COOKIE);
다시 php 부분의 상단으로 되돌아가서 보면,
extract() 함수에 $_SERVER를 적용시킨 후 $_COOKIE를 적용시켰기 때문에 $_SERVER 의 키의 이름이 $_COOKIE의 키와 동일하다면 그 이름을 가진 변수는 $_COOKIE의 값을 가지게 된다.
따라서 쿠키값을 통하여 $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);
}
해당 조건문을 참고하여 $REMOTE_ADDR 값이 127.0.0.1 이 되는 값을 생각해본다.
1 | 12 | 27 | 7. | .. | 0 | 0. | .. | 0 | 0. | .. | 1 |
변환 | |||||||||||
1 | 27 | . | 0 | . | 0 | . | 1 |
$REMOTE_ADDR 이라는 쿠키를 생성하고 값에 112277...00...00...1를 넣어주면 해당 문제가 풀릴 듯 하다.
개발자도구를 통하여 쿠키를 생성하고 새로고침을 눌러주면 해당 문제가 풀린다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 26번 문제 (0) | 2021.07.08 |
---|---|
[Webhacking.kr] Challenge(old) 25번 문제 (0) | 2021.07.08 |
[Webhacking.kr] Challenge(old) 20번 문제 (0) | 2021.07.07 |
[Webhacking.kr] Challenge(old) 19번 문제 (0) | 2021.07.06 |
[Webhacking.kr] Challenge(old) 18번 문제 (0) | 2021.07.06 |