Webhacking.kr - web37
web37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?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/*");
?>
Solution
문제를 보면 플래그 값이 $host
의 7777번 포트로 보내진다.
여기서 $host
값은 tmp/tmp-${time}
에 들어있는 값으로 결정되는데 내가 파일을 직접 올려줘야 host 값이 나로 설정이 된다.
따라서 우선 공유기에서 내 PC로 7777포트로 포트포워딩을 시킨다.
나는 windows에서 nc를 다운로드 하지 않고 가상머신으로 nc를 열어서 받을려고 했다.
- 이 부분에서 막혔었는데, netsh 명령어를 이용해서 내 PC에서 가상머신으로 포트포워딩을 시켜줄 수 있다.
- ind2x.github.io/posts/host_to_vm_ubuntu_port_forwarding/
설정을 해준 뒤, 가상머신에서 nc -lvp 7777
로 열어두고 형식에 맞게 미리 tmp 파일을 업로드 해주면 나의 외부 IP:7777
로 플래그가 보내진 뒤, 공유기에서 내 PC로 포트포워딩을 한 후 다시 내 PC에서 가상머신으로 포트포워딩 되어서 아래와 같이 플래그가 보여진다.
This post is licensed under CC BY 4.0 by the author.