快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

为什么要禁止除GET以及POST之外的HTTP要领?

近来总是听同伙说,被上级单位通报HTTP不安全要领漏洞,原先是低危漏洞,也没怎么注意它,近来升为中危漏洞,每天催着去整改,闹得胆战心惊,甚至经常被珍爱人员吐槽,做的是得不偿失的事情。

因此,有必要说明一下,为什么要禁止除GET以及POST之外的HTTP要领。

换句话说,对于这些HTTP不安全要领,到底有多不安全呢?

1、HTTP要求要领有哪些

根据HTTP标准,HTTP要求可以使用多种要领,其功能描摹以下所示。

HTTP1.0定义了三种要求要领: GET、POST、HEAD

HTTP1.1新增了五种要求要领:OPTIONS、PUT、DELETE、TRACE 、CONNECT

1.png

                                                                             图片来源于收集

二、举例说明不安全的HTTP要领

尽人皆知,GET、POST是最为常见要领,而且大部分支流网站只支持这两种要领,因为它们已能餍足功能需求。其中,GET要领首要用来获取服务器上的资源,而POST要领是用来向服务器特定URL的资源提交数据。而别的要领出于安全考虑被禁用,所以在实际应用中,九成以上的服务器都不会响应别的要领,并抛出404或405错误提示。以如下举几个HTTP要领的不安全性:

一、OPTIONS要领,将会造成服务器信息暴露,如中间件版本、支持的HTTP要领等。

2.png

2、PUT要领,由于PUT要领自身不带验证机制,行使PUT要领即可快捷简单地入侵服务器,上传Webshell或其他恶意文件,从而获取敏感数据或服务器权限。

三、DELETE要领,行使DELETE要领可以删除服务器上特定的资源文件,造成恶意攻击。

3、漏洞验证

(一)环境搭建

一、测试环境为: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。

3.png

(二)漏洞行使

一、PUT上传以及DELETE删除文件成功

在DefaultServlet的readonly参数为falsed的情形下,使用Curl进行测试,发现已能通过PUT上传以及DELETE删除文件。

4.png

2、直接PUT上传.jsp失败

此时想直接上传webshell.jsp,但发现上传失败。

5.png

研究发现,缘故起因是**在默认设置下,触及jsp、jspx后缀名的要求由org.apache.jasper.servlet.JspServlet处理**,除此之外的要求才由org.apache.catalina.servlets.DefaultServlet处理。

6.png7.png

刚才将DefaultServlet的readonly配置为false,并不能对jsp以及jspx见效。因此,当PUT上传jsp以及jspx文件时,Tomcat用JspServlet来处理要求,而JspServlet中没有PUT上传的逻辑,所以会403报错。

三、行使漏洞成功上传WebShell

对于不能直接上传WebShell的问题,一般的思路是通过解析漏洞来解决,而不少中间件版本如IIS 六、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,并成功完成对服务器的控制。

8.png9.png

4、怎么样自纠自查

从上面的Tomcat测试可以发现,虽然需在DefaultServlet的readonly参数为false条件下,才能完成渗透排泄,但照样建议把除了GET、POST的HTTP要领禁止,有两方面缘故起因:

一、除GET、POST之外的别的HTTP要领,其刚性应用处景较少,且禁止它们的要领简单,即实施成本低;

2、一旦让低权限用户可以走访这些要领,他们就能够以此向服务器实施有用攻击,即威胁影响大。

写到这里,也许人人都明白了,为什么要禁止除GET以及POST外的HTTP要领,一是因为GET、POST已能餍足功能需求,工控黑客 ,二是因为不禁止的话威胁影响大。

自纠自查方面,可以使用OPTIONS要领遍历服务器使用的HTTP要领。但要注意的是,不同目录中激活的要领可能各不相同。而且许多时辰,虽然反馈某些要领有用,但实际上它们并不能使用。许多时辰,即使OPTIONS要求返归的响应中没有列出某个要领,但该要领仍旧可用。总的来说,建议手动测试每个要领,确认其是否可用。

详细要领,举例说明,使用curl测试:

一、测试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”

三、找一个存在的文件,如test.txt,测试是否能删除

curl -X DELETE http://www.example.com/test/test.text

*

您可能还会对下面的文章感兴趣: