반응형
문제
<?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>
문제풀이
코드를 살펴보면, tmp/tmp-{$time}의 파일 내용을 host로 하여 7777 포트로 접속하고, flag 값을 전송한다.
이전 문제와 비슷하게 7777 포트를 포트포워딩 아래와 같이 해준다.
netcat을 이용하여 7777 포트를 열고, 파일 내용에 host 주소를 작성하고, 파일 제목을 tmp-{$time}로 하여 타이밍에 맞춰서 업로드 하면 플래그값을 확인할 수 있다.
반응형
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-39 (0) | 2022.12.31 |
---|---|
[Webhacking.kr] old-38 (0) | 2022.12.31 |
[Webhacking.kr] old-36 (0) | 2022.12.31 |
[Webhacking.kr] old-35 (0) | 2022.12.31 |
[Webhacking.kr] old-32 (0) | 2022.12.31 |