Apache Struts 2.0 RCE 漏洞
这是一个用于利用 CVE-2017-5638 的脚本——它允许攻击者通过 Content-Type 标头向 Web 应用程序注入操作系统命令。 Apache Struts 2 是一个开源 Web 应用程序框架,用于开发 Java EE Web 应用程序。它使用并扩展了 Java Servlet API,鼓励开发者采用模型-视图-控制器(MVC)架构。
在 2017 年 3 月的最后一周,一位化名为“Nike Zheng”的 Apache Struts 黑客发布了一个公开的概念验证利用代码,展示了在存在漏洞的 Apache Struts 2 服务器上远程执行操作系统命令是多么容易。
该漏洞编号为 CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638,允许未经身份验证的远程代码执行(RCE),通过 HTTP 请求中特制的 Content-Type 值实现。攻击者可以创建一个无效的 Content-Type 值,导致易受攻击的软件抛出异常。当软件准备显示错误消息时,Apache Struts Jakarta Multipart 解析器中的一个缺陷导致恶意的 Content-Type 值被执行而不是被显示。
自该公开利用代码发布以来,观察到大量针对易受攻击的 Apache 服务器的扫描。由于该利用代码极易执行,任何人都可以轻松地远程利用易受攻击的机器。因此,在大量扫描之后,频繁的利用事件被报告。
我们的一位客户希望我们扫描他们所有的 IP,因为他们大量使用易受攻击的 Apache Struts 2 框架,并且没有确切记录哪些 IP(Web 服务器)正在运行有漏洞的 Apache 框架。需要测试的 IP 数量接近一千个。 客户要求提交所有存在漏洞的域名,以及它是 Linux 还是 Windows 服务器的信息。为了避免逐个扫描 IP 的繁琐任务,我编写了一个小脚本。
该脚本结合了以下功能/任务:
从包含域名列表的文件中逐个读取存在漏洞的域名。
利用官方利用代码检查易受攻击的服务器。
运行利用代码并检查服务器是 Windows 还是 Linux。