728x90
<?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']; # flag저장 -> $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/*"); # 20개 넘으면 삭제 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>
코드의 길이가 길다. 대충 살펴보면은 flag변수에 flag정보를 저장하고 time에 따라 파일 명을 정한 후 파일을 업로드 한다. 이때, 파일 이름이 있으면은 파일에 서버 ip를 작성해서 저장한다.
그리고 socket으로 7777번 포트에다가 flag가 저장된 파일을 올린다.
7777번 포트를 내부 포트로 보내기 위해 포트포워딩을 해줬다.
그리고 원래라면 윈도우에서 netcat을 사용해 서버를 열어야 하지만 무슨일인지 윈도우에서 netcat이 잘 작동되지 않아서 리눅스 가상머신을 통해 진행해 주었다.
nc명령어를 이용해 7777번 포트를 열어두고
버프스위트 프록시 히스토리에서 파일 업로드 패킷을 리피터로 가져온 다음 파일 명을 시간에 맞춰 보내주면 nc로 열어둔 7777번 포트에 flag가 들어올 것이다.....
하지만 무슨 이유인지 아무런 반응이 없어서 방화벽도 꺼보고 버프스위트가 아닌 파이썬 코드를 이용해서 파일을 업로드까지 해봤는데 아무런 반응이 없었다.....
구글링을 해봤는데도 이런 경우는 없는 거 같아서 일단 블로그에 작성만 해주었다....
(해결방법 아시는 분 댓글 부탁드립니다 ㅠㅠ)
728x90
반응형
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr old 43 풀이 (0) | 2023.12.21 |
---|---|
Webhacking.kr old-56 풀이 (2) | 2023.12.21 |
Webhacking.kr 23번 문제 풀이 (0) | 2023.12.03 |
Webhacking.kr old-61 풀이 (0) | 2023.12.03 |
Webhacking.kr old-59번 풀이 (1) | 2023.11.26 |