使用CURL发送OPTIONS请求,查看响应头中的Allow行
命令:curl -I -X OPTIONS http://payloads.online
使用burp等工具
1、PUT上传和DELETE删除文件成功
在DefaultServlet的readonly参数为falsed的情况下,使用Curl进行测试,发现已能通过PUT上传和DELETE删除文件。
2、直接PUT上传.jsp失败
此时想直接上传webshell.jsp,但发现上传失败。
研究发现,原因是**在默认配置下,涉及jsp、jspx后缀名的请求由org.apache.jasper.servlet.JspServlet处理**,除此之外的请求才由org.apache.catalina.servlets.DefaultServlet处理。
刚才将DefaultServlet的readonly设置为false,并不能对jsp和jspx生效。因此,当PUT上传jsp和jspx文件时,Tomcat用JspServlet来处理请求,而JspServlet中没有PUT上传的逻辑,所以会403报错。
3、利用漏洞成功上传WebShell
对于不能直接上传WebShell的问题,一般的思路是通过解析漏洞来解决,而不少中间件版本如IIS 6、TOMCAT 7等都出现过相关的漏洞。
在此测试环境中,利用Tomcat 7的任意文件上传漏洞(CVE-2017-12615)来实现目的,该漏洞**通过构造特殊后缀名,绕过tomcat检测,让它用DefaultServlet的逻辑处理请求,从而上传jsp文件**。具体来说,主要有三种方法,比如shell.jsp%20 、shell.jsp::$DATA 、shell.jsp/
本次测试,使用第一种方法,在1.jsp后面加上%20,如此即可成功实现上传,并取得WebShell。
>curl -X PUT http://127.0.0.1:8080/examples/1.jsp%20 -d "HelloJSP"
然后就直接挂马了,从下图可以看到成功上传webshell.jsp,并成功实现对服务器的控制。
原文:https://www.cnblogs.com/GGany/p/14553700.html