bat代码雨代码流星_CVE-2019-0232:Apache Tomcat远程代码执行漏洞分析

漏洞背景

2019年4月13号,Apache Tomcat 9.0.18版本公告中提到,本次更新修复了一个代号为CVE-2019-0232的漏洞。

该漏洞只对Windows平台有效,攻击者向CGI Servlet发送一个精心设计的请求,可在具有Apache Tomcat权限的系统上注入和执行任意操作系统命令。漏洞成因是当将参数从JRE传递到Windows环境时,由于CGI_Servlet中的输入验证错误而存在该漏洞。

漏洞影响范围

★Apache Tomcat 9.0.0.M1 to 9.0.17

★Apache Tomcat 8.5.0 to 8.5.39

★Apache Tomcat 7.0.0 to 7.0.93

漏洞复现

笔者使用的测试环境为Win10 Home 1809,jre版本为18.3 (build 10.0.2+13),Tomcat版本为去年安装的9.0.13。

Tomcat的CGI_Servlet组件默认是关闭的,在 conf/web.xml 中找到注释的CGIServlet部分,去掉注释,并配置enableCmdLineArguments和executable,如下:

2dc6a86d7dd26c2f847a694a5007642d.png

20aec472e482c1b4e3459ee01d506b42.png

最后在webapps/ROOT/WEB-INF文件夹下建立hello.bat空文件,里面可以什么都不用写。

启动Tomcat,打开浏览器,访问下面链接:

http://localhost:8080/cgi-bin/hello.bat?&C%3a%5cWindows%5cSystem32%5Cnet+user

网页反馈熟悉的cmd结果如下图。

d2e38055c9c4c282a25ebac5f3685a20.png

漏洞利用场景

ab00051b2991e06b0a03ce84964a8f22.png

fd2e568b9ada9b32da56292e76729af6.gif

漏洞分析

网络社区已经有大神分析过了漏洞代码,漏洞代码位于tomcatjavaorgapachecatalinaservletsCGIServlet.java文件中,这里我追踪分析当浏览器访问http://localhost:8080/cgi-bin/hello.bat?&C%3a%5cWindows%5cSystem32%5Cnet+user时,相应代码做了哪些操作。

处理链接的代码在CGIServlet.java中的setupFromRequest函数中。

bb42dca80541da0d4d32368ebe111b4b.png

原始链接字符串

http://localhost:8080/cgi-bin/hello.bat?&C%3a%5cWindows%5cSystem32%5Cnet+user通过经过getQueryString函数,qs得到了初始查询字符串,此时,qs=”&C%3a%5cWindows%5cSystem32%5Cnet+user”。​localhost:8080

706919b982ed416493719ace0aa0ff76.png

8b2c7f2bc731a1e521c472b71fc7880d.png

4f6ac481d8184fe2bc1f611c927b9a1f.png

051d189a67f1b94ce909278dddb782f8.png

从最后一句可以看出,Tomcat调用Runtime.getRuntime().exec启动了cmd命令行,参数放在了cmdAndArgs这个ArrayList<String>数组中,cmdAndArgs是由cgiExecutable、cgiExecutableArgs、command与params组合到一起得到的。

575f057079e47a721199ba740686993f.png

还记得开头在 conf/web.xml配置了一个标签executable,配置的值为空,即为默认值,可以推测cgiExecutable与cgiExecutableArgs并没什么卵用。

ad719c92ce2c512e43721953567f3007.png

012a9e829d95b12cef847fef30b2cdca.png

与浏览器的返回结果一致,说明我们的猜想是正确的。此处必须解释&符号的作用,&含义是,表示&左边字符串与右边字符串是两条命令,命令行会依次执行”hello.bat”与”C:WindowsSystem32net user”;如果没有此处的&号,”C:WindowsSystem32net user”将作为参数传递给hello.bat。

漏洞修复

开发者在URLDecoder.decode解码后增加一个正则表达式验证,毋庸置疑,目的肯定是检测url解码后的字符串输入的合法性。

14f931569e110476f5c6a1d52f73e71e.png

9d248998d6988c3b2e188aa1f71344de.png

参考链接

  • https://xz.aliyun.com/t/4875
  • https://github.com/apache/tomcat/commit/4b244d8
pyn3rd/CVE-2019-0232​github.com
d9f2e8e3b504b25db88cc0801cba3e29.png

本文由看雪论坛 风噬 原创

原文链接:CVE-2019-0232:Apache Tomcat远程代码执行漏洞分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值