문제 화면입니다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 37</title>
</head>
<body>
<?php
$db = dbconnect();
$query = "select flag from challenge where idx=37";
$flag = mysqli_fetch_array(mysqli_query($db,$query))['flag'];
$time = time();
$p = fopen("./tmp/tmp-{$time}","w");
fwrite($p,"127.0.0.1");
fclose($p);
$file_nm = $_FILES['upfile']['name'];
$file_nm = str_replace("<","",$file_nm);
$file_nm = str_replace(">","",$file_nm);
$file_nm = str_replace(".","",$file_nm);
$file_nm = str_replace("/","",$file_nm);
$file_nm = str_replace(" ","",$file_nm);
if($file_nm){
$p = fopen("./tmp/{$file_nm}","w");
fwrite($p,$_SERVER['REMOTE_ADDR']);
fclose($p);
}
echo "<pre>";
$dirList = scandir("./tmp");
for($i=0;$i<=count($dirList);$i++){
echo "{$dirList[$i]}\n";
}
echo "</pre>";
$host = file_get_contents("tmp/tmp-{$time}");
$request = "GET /?{$flag} HTTP/1.0\r\n";
$request .= "Host: {$host}\r\n";
$request .= "\r\n";
$socket = fsockopen($host,7777,$errstr,$errno,1);
fputs($socket,$request);
fclose($socket);
if(count($dirList) > 20) system("rm -rf ./tmp/*");
?>
<form method=post enctype="multipart/form-data" action=index.php>
<input type=file name=upfile><input type=submit>
</form>
<a href=./?view_source=1>view-source</a>
</body>
</html>
문제 소스 코드입니다.
if 문 안을 실행시키려면 타이밍을 맞춰서
해당 시간의 문자열을 가진 파일을 업로드 해야 합니다.
이후 소켓을 통해 플래그를 쏴줍니다.
이를 받기 위해 포트포워딩을 해야 합니다.
버프스위트로 패킷을 잡아서 타이밍에 맞게 전달해주면
플래그가 나옵니다!
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge old-40 write-up (1) | 2023.01.19 |
---|---|
[Webhacking.kr] Challenge old-48 write-up (0) | 2023.01.18 |
[Webhacking.kr] NotSQL write-up (0) | 2022.12.23 |
[Webhacking.kr] Challenge old-41 write-up (0) | 2022.11.28 |
[Webhacking.kr] Challenge old-31 write-up (0) | 2022.11.18 |