[Webhacking.kr] Challenge old-24
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 24</title>
</head>
<body>
<p>
<?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>";
}
?><hr>
<a href=?view_source=1>view-source</a>
</body>
</html>
이 문제를 정확하게 이해하려면 php에 내장된 함수인 exract() 함수에 대해서 살펴볼 필요가 있다.
extract는 '추출하다'라는 의미를 가진 영어단어다. 이 뜻에 맞게 어느 배열로부터 추출하면 인덱스(?)만으로 그 값에 접근할 수 있다. 직접 살펴보자.
만약 GET 방식으로 데이터를 주고받을 때 우리는 GET 방식으로 전해진 데이터에 접근하기 위해 $_GET['x'], $_GET['y']와 같이 사용한다.
여기서 만약 extract($_GET)을 앞에 적어준다면????? $_GET['x']는 $x로, $_GET['y']는 $y로 접근할 수 있다.
그럼 위의 코드에서 살펴봐보자.
extract($_SERVER);
extract($_COOKIE);
$ip = $REMOTE_ADDR;
$agent = $HTTP_USER_AGENT;
$REMOTE_ADDR은 따로 선언된 적이 없는 변수다. 그런데 이를 사용하고 있다. 이유는 바로 앞의 extract($_COOKIE)에 있다. 쿠키값이 저장되는 배열인 $_COOKIE로부터 추출한 결과 $_COOKIE['REMOTE_ADDR], 즉 REMOTE_ADDR이라는 이름의 쿠키값에 $REMOTE_ADDR만을 사용해서 접근할 수 있다.
그렇다면 이번 문제는 REMOTE_ADDR이라는 쿠키값을 저 밑에 있는 변환과정을 거쳤을때 127.0.0.1이 되게 하면 된다. Editthiscookie 확장 프로그램을 이용한다.
딱 열었을 때 REMOTE_ADDR이라는 이름의 쿠키가 없다. + 버튼을 이용해 만들어주자.
밑에 있는 replace 함수를 모두 거칠거를 생각해서 위와 같이 쿠키값을 작성하고 새로고침을 누르니깐?
으악! ..을 .으로 변환하는 replace 함수가 있었다.
이대로 간다!!!!!
끼요오오옷! 률류~~
댓글
이 글 공유하기
다른 글
-
[Webhacking.kr] Challenge old-11
[Webhacking.kr] Challenge old-11
2020.08.15 -
[Webhacking.kr] Challenge old-10
[Webhacking.kr] Challenge old-10
2020.08.14 -
[Webhacking.kr] Challenge old-17
[Webhacking.kr] Challenge old-17
2020.08.14 -
[Webhacking.kr] Challenge old-16
[Webhacking.kr] Challenge old-16
2020.08.14