最近 总是 听朋友说,被上级单位通报HTTP不屈安方法漏洞,本来是低危漏洞,也没怎么把稳它,最近升为中危漏洞,每天催着去整改,闹得民气惶惶,乃至常常被掩护职员吐槽,做的是得不偿失落的事情。
因此,有必要解释一下,为什么要禁止除GET和POST之外的HTTP方法。
换句话说,对付 这些HTTP不屈安方法,到底有多不屈安呢?
一、HTTP要求方法有哪些
根据HTTP标准,HTTP要求可以利用多种方法,其功能描述如下所示。
HTTP1.0定义了三种要求方法: GET、POST、HEAD
HTTP1.1新增了五种要求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT
图片来源于网络
二、举例解释不屈安的HTTP方法
众所周知,GET、POST是最为常见方法,而且 大部分主流网站只支持这两种方法,由于它们已能知足功能需求。 个中,GE T方法紧张用来获取做事器上的资源,而POST方法是用来向做事器特定URL的资源提交数据。而其它方法出于安全考虑被禁用 ,以是 在实际运用中,九成以上的做事器都不会相应其它方法,并抛出404或405缺点提示。以下列举几个HTTP方法的不屈安性:
1、OPTIONS方法,将会造成做事器信息暴露,如中间件版本、支持的HTTP方法等。
2、PUT方法,由于PUT方法自身不带验证机制,利用PUT方法即可快捷大略地入侵做事器,上传Webshell或其他恶意文件,从而获取敏感数据或做事器权限。
3、DELETE方法,利用DELETE方法可以删除做事器上特定的资源文件,造成恶意攻击。
三、漏洞验证
(一)环境搭建
1、测试环境为:WIN10 64位、Tomcat 7.0.72、curl 7.49
2、在Tomcat 7默认配置中,web.xml文件的org.apache.catalina.servlets.DefaultServlet的
readonly参数默认是true,即不许可DELETE和PUT操作,以是通过PUT或DELETE方法访问,就会报403缺点。为合营测试,把readonly参数设为false。
(二)漏洞利用
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%2 0 -d “HelloJSP”
然后就直接挂马了,从下图可以看到成功上传webshell.jsp,并成功实现对做事器的掌握。
四、如何自纠自查
从上面的Tomcat测试可以创造,虽然需在DefaultServlet的readonly参数为false条件下,才能实现渗透,但还是建议把除了GET、POST的HTTP方法禁止,有两方面缘故原由:
1、除GET、POST之外的其它HTTP方法,其刚性运用处景较少,且禁止它们的方法大略,即履行本钱低;
2、一旦让低权限用户可以访问这些方法,他们就能够以此向做事器履行有效攻击,即威胁影响大。
写到这里,大概大家都明白了,为什么要禁止除GET和POST外的HTTP方法,一是由于GET、POST已能知足功能需求,二是由于不禁止的话威胁影响大。
自纠自查方面 ,可以利用OPTIONS方法遍历做事器利用的HTTP方法。但要把稳的是,不同目录中激活的方法可能各不相同。而且许多时候,虽然反馈某些方法有效,但实际上它们并不能利用。许多时候,纵然OPTIONS要求返回的相应中没有列出某个方法,但该方法仍旧可用。总的来说,建议手动测试每一个方法,确认其是否可用。
详细方法,举例解释,利用curl测试:
1、测试OPTIONS是否相应 ,并是否有 Allow: GET, HEAD, POST, PUT , DELETE , OPTIONS
curl -v -X OPTIONS http://www.test.com/test/
2、测试是否能通过PUT上传文件
curl -X PUT http://www.test.com/test/test.html -d “test”
3、找一个存在的文件,如test.txt,测试是否能删除
curl -X DELETE http://www.example.com/test/test.text