spring4shell 漏洞之所以如此命名,是因为在 2022 年初发现了 2 个并被攻击者广泛利用的漏洞。其中一个漏洞位于名为 "Spring Cloud Functions" 的框架组件中(不太严重),第二个更关键的组件位于框架核心,称为 "Spring Core"。由于这两个关键漏洞,社区开了一个玩笑,将其与 2021 年披露的另一个关键漏洞 Log4shell 联系起来。
Spring MVC 的特性之一是,当根据发送到端点的参数发出请求时,它会自动实例化并填充指定类的对象。简单来说,这可能被滥用以覆盖父类的重要属性,从而导致远程代码执行。针对 Spring4Shell 漏洞的大多数利用方式都是强制应用程序将恶意的 .jsp 文件写入 Web 服务器。然后可以执行此 WebShell 以在目标上获得远程命令执行。
要实现此利用,必须满足一系列因素才能使环境易受此 jsp 文件导入的影响,它们是;
spring-webmvc 和/或 spring-webflux 组件。对于此利用,我们将使用一个为此目的而创建的脚本,即此仓库中附带的 poc.py。
[!note]
用于此 POC 的脚本 (poc.py) 位于此仓库中,请在上面查看。
如有可用,请始终使用脚本的帮助信息,这样会更清晰易懂。
此攻击需要 HTTP POST 方法才能将文件传输到服务器。 在我们用于攻击的服务器上,有一个 POST 可以在页面的查看源代码中找到。
这是一个简单的页面,用于注册电子邮件以接收通知。
在查看源代码中,我们找到了此表单的 POST,其 action 指向 /。
让我们使用脚本来利用此 Web 服务器。请记住,我们必须在 POST action 中执行攻击,在本例中为根路径 /。
WebShell 已成功发送!让我们访问脚本生成的链接以确认利用成功。
完成!我们能够通过向 Web 服务器发送 WebShell 来利用该漏洞。
要修复 Spring4Shell,请确保你使用的 Spring 版本是次要版本 5.3 的第 18 个补丁之后发布的版本(即 5.3.18 之后),如果使用次要版本 5.2,则需确保是第 20 个补丁之后发布的版本(即 5.2.20 之后)。升级框架版本即可使你的应用程序摆脱该漏洞。