CTF Web 签到题学习笔记:用 curl 理解 HTTP 请求的各个组成部分(GET / POST / Cookie / 常用请求头)
题目来源:0xGame 公开赛事 Web 签到题(官方授权靶场环境)
学习目标:理解一个 HTTP 请求由哪些部分组成,各字段如何在服务端被读取和判断
适合人群:CTF 新手、第一次用 curl 手动发请求的同学⚠️ 本文所有操作仅在赛事官方分配的、临时的练习靶机上进行,不涉及任何真实系统。学习目的是理解 HTTP 协议,请勿将文中方法用于未授权的任何目标。
一、题目长什么样
打开靶机地址,页面上只有几行大字:

Yakit && BurpSuite && HackBar 你自己选一个玩吧
或者你也可以选择其他的方法
Tech Otakus Save The World
页面最底下有一行小字提示:“用GET传递 hello=web”。
没有按钮、没有输入框——它在告诉你:这道题不用点鼠标,直接手动构造一个 HTTP 请求就行。题目推荐的工具是 Yakit / BurpSuite / HackBar,但我们用 Windows 自带的 curl.exe 就能完成,零安装。
二、先搞懂 HTTP 请求的基本结构
发请求就像寄快递,包裹里分三层:
- 请求行:你要做什么(GET 还是 POST)、寄到哪个路径
- 请求头(Headers):一堆面单上的附加信息,比如"我是谁"“我从哪来”“带着什么小纸条”
- 请求体(Body):POST 时放在包裹里的货
服务器收到后,按面单上写的内容逐条判断,全部答对才给你 flag。
本题会用到的几个字段
| 字段 | 在请求的哪一层 | 通俗理解 |
|---|---|---|
?hello=web | 请求行 URL 里 | GET 方式带的参数 |
http=good | 请求体 Body 里 | POST 方式交的数据 |
Cookie: Sean=god | 请求头 | 服务端和你约定的小纸条 |
User-Agent | 请求头 | 你用的客户端标识 |
Referer | 请求头 | 你是从哪个页面跳过来的 |
Via | 请求头 | 路由中转标记 |
三、逐步骤操作(命令逐字讲解)
环境:Windows 11,PowerShell,先
cd C:\Windows\System32(路径干净,截图不会暴露个人目录)。💡 Windows PowerShell 里直接敲
curl是另一个命令的别名,必须写curl.exe才是真正的 curl。
第 1 步:GET 传 hello=web
curl.exe "http://靶机地址/?hello=web"
服务器回:用POST传递 http=good。说明 GET 这步对了。
第 2 步:POST 传 http=good
注意 URL 里要保留 ?hello=web:
curl.exe -X POST "http://靶机地址/?hello=web" --data-urlencode "http=good"
-X POST:请求方法改为 POST--data-urlencode "http=good":把数据放进请求体
服务器回:设置cookie Sean=god。
第 3 步:带上 Cookie
curl.exe -X POST "http://靶机地址/?hello=web" --data-urlencode "http=good" -H "Cookie: Sean=god"
-H用来加一个请求头,这里加的是 Cookie。
服务器回:请使用Safari浏览器访问。
第 4 步:设置 User-Agent
这里有个新手很容易踩的坑:题目要的 UA 就写 Safari 这一个词就行,不用去网上抄一长串完整的浏览器标识。
curl.exe -X POST "http://靶机地址/?hello=web" --data-urlencode "http=good" -H "Cookie: Sean=god" -A "Safari"
-A是设置 User-Agent 的简写。
服务器回:请从www.mihoyo.com访问本页面。(一个原神玩家才懂的小彩蛋)
第 5 步:设置 Referer
Referer 直接写域名,不要加 http://:
curl.exe -X POST "http://靶机地址/?hello=web" --data-urlencode "http=good" -H "Cookie: Sean=god" -A "Safari" -H "Referer: www.mihoyo.com"
服务器回:请使用clash这只猫猫来代理一下。
第 6 步:按提示设置 Via 头
题目提示"代理一下",那就按它说的加一个 Via 请求头,值照提示写:
curl.exe -X POST "http://靶机地址/?hello=web" --data-urlencode "http=good" -H "Cookie: Sean=god" -A "Safari" -H "Referer: www.mihoyo.com" -H "Via: clash"
四、成功拿到 flag

0XGame{Congratuation_You_Are_Http_God!!!}
服务器还写了一句:“HTTP 协议的真理,你已解明!”
💡 靶机是临时容器,每次重启网址都会变,把命令里的"靶机地址"换成你当前分配的地址即可。
五、一张表总结整条请求
这道题服务端没有下发会话 Cookie,所以最后一条命令必须一次性把所有字段都带上:
| 字段 | 值 | 位置 |
|---|---|---|
hello | web | URL 查询参数 |
http | good | POST 请求体 |
Cookie | Sean=god | 请求头 |
User-Agent | Safari | 请求头 |
Referer | www.mihoyo.com | 请求头 |
Via | clash | 请求头 |
最终命令(替换成自己的靶机地址):
curl.exe -X POST "http://你的靶机地址/?hello=web" --data-urlencode "http=good" -H "Cookie: Sean=god" -A "Safari" -H "Referer: www.mihoyo.com" -H "Via: clash"
六、服务端大概是怎么判断的
用伪代码帮你理解出题思路(这是本题最值得学的部分):
if ($_GET['hello'] !== 'web') die('用GET传递 hello=web');
if ($_POST['http'] !== 'good') die('用POST传递 http=good');
if ($_COOKIE['Sean'] !== 'god') die('设置cookie Sean=god');
if ($_SERVER['HTTP_USER_AGENT'] !== 'Safari') die('请使用Safari浏览器访问');
if ($_SERVER['HTTP_REFERER'] !== 'www.mihoyo.com') die('请从www.mihoyo.com访问');
if ($_SERVER['HTTP_VIA'] !== 'clash') die('请按提示设置路由头');
echo $flag;
看明白没?它就是在逐一读取你请求里的各个字段,然后和期望值做字符串比较。这正是这道题的教学价值——让你亲手感受"请求头里的每一行,服务端都能拿到"。
七、新手常见问题
Q1:为什么我抄了一长串 Safari 的完整 UA 反而不行?
A:题目用的是字符串比较,它要的就是 Safari 这个短值。CTF 里遇到"请用某客户端",先试最短写法,别一上来就抄完整标识。
Q2:为什么 Referer 写 https://www.mihoyo.com/ 不行?
A:因为它只认 www.mihoyo.com 这串字。遇到这种精确匹配题,把协议头和末尾斜杠都去掉试试。
Q3:为什么浏览器地址栏改不了这些?
A:地址栏只能改 URL。Cookie、UA、Referer、Via 这些必须用 curl 或专用工具手动设置。
Q4:PowerShell 里 curl 和 curl.exe 区别?
A:PowerShell 的 curl 默认是 Invoke-WebRequest 的别名,参数不通用;要敲 curl.exe。
八、安全启示(蓝队视角)
这道题反过来也告诉我们一个重要原则:
客户端发来的任何请求头,都不能作为安全信任的依据。
User-Agent、Referer、Cookie、Via 这些字段,客户端想写什么就写什么,服务端不能拿它们来做身份校验或权限判断。真正可靠的会话状态,必须由服务端签发不可伪造的令牌,并在服务端校验。这也是学习 Web 安全时需要建立的基本认知。
九、总结
这道题本质上是一次"HTTP 请求结构解剖练习":
- GET 参数在 URL 里
- POST 参数在请求体里
- Cookie、UA、Referer、Via 都在请求头里
每一步提示都对应一个可手动控制的字段,把它们逐一填对,就通关了。CTF 签到题的价值不在于"拿到 flag",而在于帮你建立"请求是可被完全构造的"这一认知,这是后续学习 Web 安全的地基。
版权与免责声明
- 本文仅用于网络安全学习与 CTF 技术交流,靶机来源于 0xGame 公开赛事的官方临时练习环境。
- 文中所有命令均在赛事官方分配的靶机上执行,不对任何真实系统进行测试。
- 请勿将本文方法用于未经授权的任何目标;因不当使用造成的后果与作者无关。
- 题目版权归 0xGame 赛事主办方所有,解题思路为个人学习记录,转载请注明出处。
更多推荐

所有评论(0)