Polar CTF Web 简单难度题目实战解析
本文针对 Polar CTF Web 简单难度题目进行实战复盘,涵盖 SWP 文件泄露、PCRE 回溯绕过、RCE 命令执行、JWT 伪造、Session 文件包含等常见 Web 安全漏洞。通过代码审计与流量分析,演示了如何构造 Payload 获取 Flag,重点讲解正则过滤绕过技巧及 PHP 反序列化利用方法。
SWP 文件泄露与 PCRE 回溯绕过
第一题通常作为热身,访问 /.index.php.swp 可发现备份文件。F12 查看源码或下载后分析,发现 POST 传参 xdmtql 需包含 "sys nb" 且匹配 /sys\.\*nb/is 正则。由于参数不能为数组,常规绕过无效,但可利用 PCRE 回溯次数限制(ReDoS)使 preg_match 失效。
import requests
url = 'http://6798cfa0-6424-4490-af65-7ee1c5b6153e.www.polarctf.com:8090/'
data = {
'xdmtql': 'sys nb' + 'very' * 250000
}
r = requests.post(url=url, data=data).text
print(r)
运行脚本即可触发逻辑漏洞返回 Flag。
简单 RCE 与正则绕过
该题提供一段 PHP 代码,要求满足两个条件:GET 参数 sys 存在,POST 参数 yyds 存在。函数内部通过正则禁止了 cat 等读取命令及空格,并禁用了部分执行函数。绕过思路在于利用 include 直接包含 /flag 文件,同时规避空格过滤。
Payload 构造如下:
/?sys=include"/flag";
配合 POST 传参 yyds=666 即可执行。
蜜雪冰城吉警店
题目要求点第 9 个隐藏款奶茶的单子。查看源代码发现 ID 列表仅到 8,直接将请求中的 id=8 修改为 id=9 并提交,即可触发隐藏逻辑获取 Flag。
召唤神龙与 JSFuck
游戏界面看似无法操作,查看 main.js 源码发现一段加密文本。经识别为 JSFuck 编码,使用在线工具解码后可还原出原始逻辑,进而找到通关路径。
Seek Flag 与多源信息聚合
- 访问
robots.txt获取flag3。 - 抓包分析响应头或 Body,定位
flag2。 - 参考 Cookie 机制,将
id改为 1 发送请求,获取flag1。 - 拼接所有片段得到完整 Flag。
JWT 伪造
登录界面存在 Base64 编码字符串,解密后无明显意义。注册普通用户后查看源码,发现 JWT 令牌结构。使用工具爆破密钥,得到 SYSA。随后伪造 JWT 载荷,将用户名修改为 admin,重新签名并替换 Cookie 即可越权访问。
Login 与学号递增
前端提示登录成功但无实质反馈。通过 BP 抓包尝试攻击,发现学号从 2 开始递增时,每个请求会返回 Flag 的一部分。遍历学号收集碎片后拼接即可。
iPhone UA 检测
页面入口无明显信息,检查代码提示修改 User-Agent。使用抓包工具将请求头 User-Agent 修改为 iPhone 相关标识,即可解锁隐藏内容。
浮生日记与 XSS 注入
F12 查看源码发现 title 属性涉及弹窗逻辑。结合题目名称推测为 JS 注入。测试发现输入 <script>alert(1)</script> 会被清空,说明存在过滤。尝试闭合 value 值并双写绕过,构造 Payload:
"><scriscriptpt>alert(1)</scriscriptpt>
提交后触发弹窗获取 Flag。
变量覆盖与超全局变量
PHP 代码中存在变量覆盖风险。通过 GET 传参 c 给变量 $a,利用正则绕过符号限制。初始尝试输出 FLAG 为 NULL,转而利用超全局变量 GLOBALS 构造:
?c=GLOBALS
即可查看系统变量内容。
MD5 校验与爆破
代码逻辑检查 MD5 加密后字符串的第 2、15、18 位字符是否相同,并进行特定数学运算验证。访问 /?pass=text 后,使用工具对参数进行爆破,根据长度特征定位可疑点,最终解得 Flag。
XFF 伪造
题目提示利用 XFF (X-Forwarded-For) 头。直接构造请求头 X-Forwarded-For: 127.0.0.1 发送给重放器,观察响应变化以获取权限。
RCE1 管道符绕过
GET 传入 ip 参数,通过正则过滤空格。利用管道符 | 连接命令,例如 127.0.0.1|ls,返回生成的 flag.php 文件,右键查看源码或直接访问获取 Flag。
GET-POST 组合
根据代码逻辑,需先通过 GET 传参初始化状态,再 POST 传参提交数据,按顺序组合请求即可。
被黑掉的站与目录扫描
扫描目录发现 index.php.bak 泄露字典。访问 shell.php 后,使用字典爆破密码进入后台。
签到题与伪协议
抓包发现 Cookie 初始值为 no,改为 yes 后返回 Base64 字符串。分析代码发现 file 参数存在文件包含漏洞,../ 被过滤为空。结合 PHP 伪协议 php://filter 进行双写绕过,读取文件内容。
前端禁用绕过
提交按钮无法点击,F12 移除元素 disabled 属性。调整 maxlength 限制以复制完整提示,提交获得 Flag。
Session 文件包含
POST 传入 name 参数时,PHP 会将 Session 数据写入本地文件。在 name 中注入恶意 PHP 代码(如 <?php system('ls');?>),利用 include($_GET['file']) 的 LFI 漏洞包含该 Session 文件,从而执行任意命令。
Don't touch me
F12 查看源码发现 2.php,访问后发现按钮被禁用。删除 disabled 属性后点击,源码中暴露 fla.php,访问即得 Flag。
Robots 协议
根据提示访问 robots.txt,其中包含敏感路径指引,继续访问对应路径获取 Flag。
PHP 反序列化
代码对 $_GET['a'] 进行 unserialize 操作,类中存在 __destruct 魔术方法调用 eval()。构造 Example 类对象,将 $sys 属性设为危险命令,序列化后传入 URL 参数。
<?php class Example { public $sys="system('tac cat flag.php');"; }
$a = new Example(); var_dump(serialize($a)); ?>
注意 cat 可能无法直接输出,改用 tac 读取文件内容。
Ezupload 与一句话木马
上传功能限制 GIF 格式。上传一句话木马并将后缀改为 .gif,抓包修改为 .php 发包。使用蚁剑连接 Shell 获取 Flag。
Cookie 欺骗
网页提示仅 admin 用户可见 Flag。前端修改无效,通过抓包拦截请求,修改 Cookie 中的用户身份标识为 admin 即可。
Upload 与双写绕过
上传图片功能未作响应,源码显示存在过滤。利用 str_ireplace 函数特性,采用双写 pphphp 绕过 php 关键字过滤,上传成功并连接获取 Flag。

