请求方式 — 题目解法
前置知识:HTTP 协议基础 — 先了解 HTTP 协议基础再来看本题
题目描述
服务器要求使用 CTFHUB 请求方法来访问,用标准的 GET/POST 拿不到 flag。
解法 2:Burp Suite 图形化
步骤:
- 浏览器配置代理到 Burp(127.0.0.1:8080)
- 访问题目 URL,Burp 拦截到请求
- 在 Repeater 模块中,修改请求首行:
# 原始请求
GET /index.php HTTP/1.1
# 修改后
CTFHUB /index.php HTTP/1.1
- 点击 Send,响应中拿到 flag
注意:Burp 默认只显示 GET/POST 下拉菜单,直接在请求第一行手动修改即可。
原理精讲 — 为什么能这样做?
HTTP 请求报文结构
客户端向服务器发送的 HTTP 请求,本质上是这样一个纯文本:
GET /index.php HTTP/1.1 <- 请求行(方法 + URL + 协议版本)
Host: www.example.com <- 请求头
User-Agent: Mozilla/5.0
Cookie: session=abc123
<- 空行(分隔头部和正文)
body=value <- 请求体(GET 请求没有)
关键就在第一行(请求行):
[方法] [路径] [HTTP版本]
方法(Method) 是一个字符串标识,协议规范只定义了 GET/POST/PUT/DELETE 等标准方法,但没有限制你只能用这些。
HTTP 协议为什么允许自定义方法?
RFC 7231 规定:
方法(Method)是一个 token,请求的目的是指示服务器对目标资源执行什么操作。
换句话说,方法名只是一个约定,而不是一个硬性限制。服务器端通过读取 HTTP 请求行的第一个单词来判断方法,然后执行对应的逻辑。
服务器端逻辑
题目服务器的伪代码大概是这样的:
$method = $_SERVER['REQUEST_METHOD']; // 获取请求方法
if ($method === "CTFHUB") {
echo $flag; // 方法匹配 -> 返回 flag
} else {
echo "请使用CTFHUB方法访问";
}所以只要我们发送的 HTTP 请求第一行是 CTFHUB /index.php HTTP/1.1,服务器就会认为是合法请求,返回 flag。
核心知识点总结
| 概念 | 说明 |
|---|---|
| 请求方法 | HTTP 请求行的第一个单词,是一个 token |
| 标准方法 | GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH、CONNECT、TRACE |
| 自定义方法 | 任何非标准字符串,如 CTFHUB、FLAG、TEST |
| 方法大小写 | 方法名区分大小写,CTFHUB != ctfhub |
| 服务器处理 | 由应用程序代码根据方法名判断,与协议无关 |
关联教程
本知识库中更深入的 HTTP 协议与 Web 基础:
- HTTP 协议基础 — CTF 中 HTTP 相关题目总览
- 01-计算机网络基础 — OSI 模型与 TCP/IP 协议栈
- 02-Web技术基础 — HTTP 协议完整解析(请求/响应/缓存/认证)
- 01-Web基础与HTTP协议 — Web 安全实战场景
- Web 方向总览 — Web 方向 CTF 题型与思路总览
- 总目录与快速查询 — 红队完整知识体系