[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
댓글을 사용할 수 없습니다.