该脚本用于验证 Apache Struts 2 漏洞(CVE-2017-5638),又名 Struts-Shock。它完全无害,因为它不会注入任何恶意负载,仅注入一个名为 'STRUTS2-VALIDATION' 的 HTTP 请求头,以便能够验证目标是否易受攻击。
由于其多线程能力,它能够在不到 10 分钟内运行遍布全球的 2500 多个应用程序。因此,它在验证大型企业应用程序时非常方便。
cve-2017-5638 易受攻击站点示例
该项目旨在展示 CVE-2017-5638 的利用方式,仅供教育目的。 更多信息,请参见 https://cwiki.apache.org/confluence/display/WW/S2-045
本项目仅供教育和道德测试目的。未经双方事先同意攻击目标是违法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,也不对因使用本程序而造成的任何滥用或损害负责。
docker run -d -p 8080:8080 jrrdev/cve-2017-5638:latest
在攻击者机器上下载利用脚本 点击这里
在攻击者机器上运行 Python 利用脚本:
python exploit.py http://<DOCKER_HOST>:8080/hello "ls -l"
运行此脚本有两种方式:使用线程和不使用线程,唯一的区别是执行时间。要启用线程功能,只需传递 thread 参数。
第一个参数必须是一个 TXT 文件,包含所有目标 URL,每行一个。请注意,这些 URL 应该是完整的,例如 https://target.com/admin/myStrutsPage.action
以下是不使用线程的用法示例:
struts-shock-validation.py target_urls.txt
现在使用线程功能:
struts-shock-validation.py target_urls.txt thread
http://struts.apache.org/docs/s2-016.html https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017
Metasploit 框架利用模块,用于 Apache Struts Content-Type 利用 尚未在 Windows 服务器上测试,但在 Linux 服务器上使用 generic/shell_bind_tcp 负载进行了测试
CVE-2017-5638 的 PoC 代码示例 | Apache Struts 利用 | DORK: ext:action
用法:python struts.py https://victim.site dir
最初发布的 Python 脚本没有正确格式化 Content-Type 请求头。 我重新编写了 Content-Type 请求头,使其正确格式化为 Content-Type:%20{Exploit}。 我还添加了日志记录和 Requests 模块,然后将对象属性转储到标准输出。
示例输出
由 XSS.Cx 检查 CVE-2017-5638
D 盘中的卷没有标签。 卷序列号为 2A7B-A245 d:\Program Files\Apache Software Foundation\Tomcat 9.0 的目录
本项目是 Apache Struts 漏洞的概念验证。 目标是创建一个软件,能够生成并测试随机 IP 地址是否存在上述漏洞。
请自行承担使用风险,且仅供教育目的。
cURL
Nmap
生成随机 IP 并将其保存到文本文件。
./get_ip.sh [要扫描的主机数] [要扫描的端口] [输出文件名]
./get_ip.sh 10000 80 output.txt
检查特定 IP 地址是否存在漏洞。
./struts_check.sh [IP 地址] [端口]
./struts_check.sh 127.0.0.1 80
检查 IP 地址列表是否存在漏洞。
./main.sh [包含 IP 地址的文本文件] [端口]
./main.sh output.txt 443
在没有 Apache Struts 漏洞补丁的服务器上执行命令
./struts_attack.sh [IP 地址] [命令]
./struts_attack.sh https://127.0.0.1 whoami
# CVE-2017-5638 PoC 代码(Python) | DORK: ext:action
CVE-2017-5638 的 PoC 代码示例 | Apache Struts 利用 | DORK: ext:action
用法:python struts.py https://victim.site dir
最初发布的 Python 脚本没有正确格式化 Content-Type 请求头。
我重新编写了 Content-Type 请求头,使其正确格式化为 Content-Type:%20{Exploit}。
我还添加了日志记录和 Requests 模块,然后将对象属性转储到标准输出。
示例输出
由 XSS.Cx 检查 CVE-2017-5638
D 盘中的卷没有标签。
卷序列号为 2A7B-A245
d:\Program Files\Apache Software Foundation\Tomcat 9.0 的目录
## 结果
它会自动创建一个名为 results 的文件夹,每次执行时会创建一个带日期的文件夹,其中包含执行结果。如果启用了线程,则会为每个线程创建一个名为 thread_<number> 的文件,这些文件可以忽略,因为完成时它会将所有线程的结果合并到一个与执行文件夹同名的 TXT 文件(日期/时间戳)中。