1.先进入靶机环境

进入目录,docker打开环境
2.查看web页面,准备抓包

3.bp抓包,然后修改

get方法改成put,根路径下添加文件名,后面增加exp数据

之前状态码为400,未上传成功,发现路径写错了,修改后上传成功
4.发送完成,服务器上已经存在上传文件,前去查看一下

第一次上传,因为路径写错,没有上传成功,后面修改后长传成功可以查看到文件
5.因为我用的是反弹shell,所以先开nc,然后访问页面


虽然页面没有内容但是看shell已经反弹成功

6.加油不同系统所用的上传方式不一样,总体上有如下三种
shell.jsp%20 shell.jsp::$DATA shell.jsp/
7.使用知识点
a.Tomcat将readonly设置为false的同时也开启了对PUT请求方式的支持
b.org.apache.jasper.servlet.JspServlet:默认处理jsp,jspx文件请求,不存在PUT上传逻辑,无法处理PUT请求
org.apache.catalina.servlets.DefaultServlet:默认处理静态文件(除jsp,jspx之外的文件),存在PUT上传处理逻辑,可以处理PUT请求。
c.所以我们即使可以PUT一个文件到服务器但也无法直接PUT以jsp,jspx结尾文件,因为这些这些后缀的文件都是交由JspServlet处理的,它没法处理PUT请求。
d.当使用第6点中的三个方法来上传文件,那tomcat并不认为其是jsp文件从而交由DefaultServlet处理,从而成功创建jsp文件,这也就是所谓的CVE-2017-12615漏洞。
ps:可以用msf里面自带的exp直接打,还有searchsploit中查到的py脚本来用。
借鉴颇多:
https://www.cnblogs.com/rnss/p/13384127.html