漏洞英文bug/ApacheTomca远程执行代码(CVE-2019-0232)漏洞浅析和复现_新手白客知识点

漏洞英文bug/ApacheTomca远程执行代码(CVE-2019-0232)漏洞浅析和复现_新手白客知识点

声 明

本文由Tide安全团队成员“爱上卿Ooo”首发于 专栏:

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

远程执行代码(CVE-2019-0232)漏洞浅析和复现

一、 漏洞背景

,俗称 ,是一个开源的容器,由社区在 (ASF)的支持下开发。它实现了多个Java EE规范,包括Java , Pages(JSP),Java表达式语言(EL)和,并提供了一个“纯Java”HTTP Web服务器环境,Java代码可以在该环境中运行。

2019年4月15日,网络安全发布的信息对CVE-2019-0232,包括 上的通用网关接口(CGI)的一个远程执行代码(RCE)漏洞。这种高严重性漏洞可能允许攻击者通过滥用由 输入验证错误引起的操作系统命令注入来执行任意命令。

二、 影响版本

影响版本如下:

7.0.04之前

8.5.40之前

9.0.19之前

三、 漏洞分析

CGI( ) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。CGI脚本用于执行 Java虚拟机(JVM)外部的程序。默认情况下禁用的CGI 用于生成从查询字符串生成的命令行参数。由于Java运行时环境(JRE)将命令行参数传递给的错误,在启用CGI 参数ts的计算机上运行的服务器很容易受到远程代码执行的影响。

文件web.xml用于为加载到实例中的所有Web应用程序定义默认值。CGI 是默认提供的之一。该支持执行符合CGI规范的外部应用程序。通常,CGI 映射到URL模式“/cgi-bin / *”,这意味着任何执行的CGI应用程序必须存在于Web应用程序中。

tomcatssl漏洞_tomcat漏洞_漏洞英文bug

通过调用()函数启动操作系统中的新进程,该函数将以下命令行作为字符串(对的参数):int (…,,…)

中的参数不是作为字符串数组单独传递的,而是作为单个命令行字符串传递的。这要求程序通过使用() API 提取命令行字符串然后使用()辅助函数解析参数字符串来解析命令行本身。的命令行字符串流程图如下:

漏洞英文bug_tomcat漏洞_tomcatssl漏洞

漏洞是由于命令行参数从JRE到的不正确传递而产生的,对于Java应用程序,在()函数启动之前调用()。然后将参数传递给()的静态方法start ,这是一个依赖于平台的类。在()的实现中,start方法调用()的私有构造函数,该构造函数为调用创建命令行。Java应用程序的命令行字符串流程图如下:

漏洞英文bug_tomcatssl漏洞_tomcat漏洞

()构建并将其传递给() 函数,之后() 在cmd.exe shell环境中执行.bat和.cmd文件。

如果要运行的文件包含.bat或.cmd扩展名,则要运行的映像将变为cmd.exe,即命令提示符。然后()在阶段1重新启动,批处理文件的名称作为cmd.exe的第一个参数传递。这导致’hello.bat …’成为’C:\ \ \cmd.exe / c“hello.bat …” ’。由于的引用规则与cmd的引用规则不同,这意味着需要应用一组额外的引用规则以避免cmd.exe解释的命令行中的命令注入。

由于Java(())确实没有额外的报价为这种隐含的cmd.exe上传递的参数调用推广,通过加工参数的cmd.exe现在被用来执行,呈现固有的问题,如果参数不传递给cmd.exe的正确。

对于cmd.exe,我们首先理解cmd本质上是一个文本预处理器:给定一个命令行,它进行一系列文本转换,然后将转换后的命令行交给()。某些转换用其值替换环境变量名称。转换,例如由&,||,&&运算符触发的转换,将命令行拆分为几个部分。所有cmd的转换都由以下元字符之一触发:(,),%,!,^,“,,&和|。元字符“特别有趣:当cmd正在转换命令行并看到”时,它会将“复制”到新的命令行,然后开始将字符从旧命令行复制到新命令行,而不会看到是否有任何这些字符是元字符。这一直持续到cmd到达命令行的末尾,进入变量替换,或者看到另一个“。

如果我们依赖cmd的“-来保护参数,使用引号会产生意外行为。通过将不受信任的数据作为命令行参数传递,由此约定不匹配引起的错误成为安全问题。

例如,以下内容:

hello.bat“dir\”&“

0:[hello.bat]

1:[&dir]

这里,cmd将&解释为命令分隔符,因为从它的角度来看,&字符位于引用区域之外。在这种情况下,’’可以被任意数量的有害命令所取代。当使用hello.bat运行上面显示的命令时实现命令执行。

四、 漏洞复现

首先下载有漏洞的版本,加压到响应文件夹,然后配置环境变量。

tomcatssl漏洞_漏洞英文bug_tomcat漏洞

漏洞英文bug_tomcat漏洞_tomcatssl漏洞

tomcatssl漏洞_漏洞英文bug_tomcat漏洞

然后修改.xml

tomcatssl漏洞_tomcat漏洞_漏洞英文bug

修改web.xml,添加一些参数并在web.xml文件中启用。

漏洞英文bug_tomcat漏洞_tomcatssl漏洞

两个文件修改后,启动服务器,访问:8080/

tomcat漏洞_漏洞英文bug_tomcatssl漏洞

tomcatssl漏洞_漏洞英文bug_tomcat漏洞

成功访问到后,创建hello.bat脚本放入cgi-bin目录下。

tomcat漏洞_漏洞英文bug_tomcatssl漏洞

hello.bat内容

漏洞英文bug_tomcatssl漏洞_tomcat漏洞

然后访问:8080/cgi-bin/hello.bat?dir,显示如下命令执行成功。

漏洞英文bug_tomcat漏洞_tomcatssl漏洞

tomcatssl漏洞_tomcat漏洞_漏洞英文bug

五、 修复建议

下载 官方补丁尽快升级进行防护。同时,用户可以将CGI 初始化参数ts设置为false来进行防护。

~

网络安全学习,我们一起交流

~

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值