首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看我如何用一条HTTP指令拿到Webshell

最近老是被上级单位通报批评,原因是发现了好多HTTP不安全方法漏洞,每天都催着运维同事整改,还经常被他们吐槽,尽做些小题大做的工作。该如何跟他们解释这项工作呢?

首先,什么是HTTP不安全方法?

答曰:除GET和POST之外的HTTP方法。

那么,这些HTTP不安全方法,到底有多不安全呢?

一、HTTP方法

HTTP1.0定义了三种请求方法: GET、POST、HEAD

HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 、CONNECT

二、不安全的HTTP方法

GET、POST是最常见方法。其中,GET用来获取服务器的各种资源;POST用来向服务器特定资源提交数据。除此之外,大部分服务器都不会响应其它方法,并抛出40X错误提示。(使用Restful API标准的网站比较特殊,后续再研究)

以下列举几个HTTP方法的不安全性:

1、OPTIONS方法。造成服务器信息暴露,如中间件版本、支持的HTTP方法等。

2、PUT方法。PUT方法不带验证机制,用PUT方法可简单上传Webshell或其他恶意文件,从而入侵服务器,获取敏感数据。

3、DELETE方法,利用DELETE方法可删除服务器上特定资源文件,造成恶意攻击。

三、漏洞验证

(一)环境搭建

1、测试环境:WIN10 64位、Tomcat 7.0.72、curl 7.49

readonly参数默认为true,即仅支持只读操作,不允许DELETE与PUT操作,所以通过这两个方法访问,会报40X错误。为配合测试,把readonly参数改为false。

(二)漏洞利用

1、PUT上传文件、DELETE删除文件

使用Curl进行测试,成功通过PUT上传和DELETE删除文件。

2、使用PUT方法,上传jsp文件失败

如果直接上传webshell.jsp,上传失败,提示40X。

此前将DefaultServlet的readonly设置为false,但并不能对jsp和jspx生效。

因此,当PUT jsp和jspx文件时,Tomcat用JspServlet处理请求,但JspServlet中没有PUT上传的逻辑,所以会40X报错。

3、利用漏洞成功上传WebShell

对于不能直接上传.jsp文件的问题,一般思路是通过解析漏洞可以绕过,而不少中间件版本如IIS 6、TOMCAT 7等都出现过相关的漏洞,所以不难解决。

这里利用Tomcat 7的任意文件上传漏洞(CVE-2017-12615)来实现:通过构造特殊后缀名,绕过Tomcat检测,让Tomcat用DefaultServlet的逻辑处理请求,从而上传jsp文件。

具体来说,主要有三种方法,比如shell.jsp%20 、shell.jsp::$DATA 、shell.jsp/

本次测试,使用第一种方法,可成功实现上传,并取得WebShell。

>curl -X PUThttp://127.0.0.1:8080/examples/1.jsp%20 -d “HelloJSP”

然后就直接挂马了,从下图可以看到成功上传webshell.jsp,并成功实现对服务器的控制。

四、如何自纠自查

虽然需在DefaultServlet的readonly参数为false前提下,才能实现上述渗透。在不影响业务使用的情况下,建议把除了GET、POST的HTTP方法禁止,有两方面原因:

1、禁止HTTP方法的操作简单,实施成本低;

2、一旦让低权限用户可以使用不安全方法,他们就能够以此向服务器实施有效攻击,威胁影响大。

写到这里,也许大家都明白这个问题“为什么要禁止除GET和POST外的HTTP方法”的答案了。

一是因为GET、POST已能满足功能需求,二是因为不禁止的话威胁影响大。

自纠自查方面,可使用OPTIONS方法遍历服务器使用的HTTP方法。

但要注意的是,不同目录中激活的方法可能各不相同。而且有些时候,虽然反馈某些方法有效,但实际上它们并不能使用。有些时候,即使OPTIONS请求返回的响应中没有列出某个方法,但该方法仍然可用。

总的来说,建议手动测试每一个方法,确认其是否可用。

具体方法,举例说明,使用curl测试:

1、测试OPTIONS是否响应,并是否有 Allow: GET, HEAD, POST,PUT,DELETE, OPTIONS

curl -v -X OPTIONShttp://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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G1WA3C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券