赞
踩
本章节所需工具burp和curl
curl下载地址:https://curl.haxx.se/download.html
什么是http方法?
根据HTTP标准,HTTP请求可以使用多种方法,其功能描述如下所示。
HTTP1.0定义了三种请求方法: GET、POST、HEAD
HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT
什么是不安全的http方法?
在所有的HTTP方法中,安全界认为PUT、DELETE、TRACE是不安全的,另外WebDAV中的几个方法,RFC 5789中的PATCH方法也被认为是不安全的。(TRACE容易引发XST攻击,PATCH修改资源的部分内容,PUT/DELETE没有认证机制等原因,不仅仅因为它们会产生结果)
不安全的http方法有什么危害?
1、OPTIONS方法,将会造成服务器信息暴露,如中间件版本、支持的HTTP方法等。
2、PUT方法,由于PUT方法自身不带验证机制,利用PUT方法即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限。
3、DELETE方法,利用DELETE方法可以删除服务器上特定的资源文件,造成恶意攻击。
环境搭建
1、测试环境为:WIN10 64位、Tomcat 8.5.15、curl 7.65、burp 1.7.30
2、在Tomcat 8默认配置中,web.xml文件的org.apache.catalina.servlets.DefaultServlet的
readonly参数默认是true,即不允许DELETE和PUT操作,所以通过PUT或DELETE方法访问,就会报403错误。为配合测试,把readonly参数设为false。
漏洞验证
打开burp抓包,ctrl+R发送到重放模块,修改http方法为OPTIONS,再返回包中发现支持的方法,如下图
漏洞利用
安装curl:https://blog.csdn.net/dear_alice_moon/article/details/79509466
使用方法:https://www.cnblogs.com/hbzyin/p/7224338.html
打开如下图
对目标url进行测试,如下图
PUT上传文件
payload:curl -X PUT http://127.0.0.1:8800/test/1.html -d "1111"
DELETE删除文件
payload:curl -X DELETE http://127.0.0.1:8800/test/1.html
如果不是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报错。
绕过限制
tomcat任意文件上传漏洞:影响版本是tomcat7.0.0-7.0.81版本。我这里没装先不试了
利用Tomcat 7的任意文件上传漏洞(CVE-2017-12615)来实现目的,该漏洞**通过构造特殊后缀名,绕过tomcat检测,让它用DefaultServlet的逻辑处理请求,从而上传jsp文件**。具体来说,主要有三种方法,比如shell.jsp%20 、shell.jsp::$DATA 、shell.jsp/
如何修复此漏洞?
在配置文件中添加如下代码
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>fortune</web-resource-name>
- <url-pattern>/*</url-pattern>
- <http-method>PUT</http-method>
- <http-method>DELETE</http-method>
- <http-method>HEAD</http-method>
- <http-method>OPTIONS</http-method>
- <http-method>TRACE</http-method>
- </web-resource-collection>
- <auth-constraint></auth-constraint>
- </security-constraint>
<security-constraint>
用于限制对资源的访问;
<auth-constraint>
用于限制那些角色可以访问资源,这里设置为空就是禁止所有角色用户访问;
<url-pattern>
指定需要验证的资源
<http-method>
指定那些方法需要验证
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。