728x90
[문제]
https://webhacking.kr/chall.php?order=v
[문제 풀이]
<?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>
- 먼저 코드를 분석해 보자!
- extract($_SERVER); 및 extract($_COOKIE);: 부분에서 $_SERVER 및 $_COOKIE 배열의 키를 개별 변수로 추출한다.
- htmlspecialchars() 함수로 $REMOTE_ADDR를 HTML 특수문자를 이스케이프 처리한다. str_replace()를 사용하여 IP 주소에서 특정 문자열을 제거하거나 변경한다.
- 클라이언트 IP가 "127.0.0.1"인 경우 solve(24) 함수를 호출한다.
- 코드를 보면 client ip가 127.0.0.1이면 문제가 해결된다는 것을 알게 되었다.
- 그래서, 쿠키에 REMOTE_ADDR 쿠키를 추가해서 IP를 바꾸기로 했다.
- REMOTE_ADDR 쿠키를 추가해서 값에 127.0.0.1을 넣고 새로고침을 했더니 client ip가 1로 필터링되었다.
- 그래서, ip가 필터링되지 않도록 값 112277...00...00...1을 넣기로 했다.
- 그 결과, 문제를 해결할 수 있었다!
'보안 > CTF' 카테고리의 다른 글
[모의침투] | [RCity] 1.Linux 명령어 - Operation RCity0 (0) | 2025.01.19 |
---|---|
[웹해킹] | [드림핵]: command-injection-chatgpt (0) | 2025.01.16 |
[웹해킹] | [드림핵]: baby-Case (0) | 2025.01.11 |
[Webhacking.kr] old-18 write-up (0) | 2025.01.05 |
[Webhacking.kr] old-26 write-up (0) | 2025.01.05 |