Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
wgpsec avatar

Ctf Flag Verification

  • 29 installs
  • 1.6k repo stars
  • Updated July 19, 2026
  • wgpsec/aboutsecurity

Helps with ai & agent building tasks during AI-assisted development.

About

ctf-flag-verification is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • ctf-flag-verification
  • AI & Agent Building
  • AI-coding skill

Ctf Flag Verification by the numbers

  • 29 all-time installs (skills.sh)
  • +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
  • Ranked #9,417 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill ctf-flag-verification

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs29
repo stars1.6k
Last updatedJuly 19, 2026
Repositorywgpsec/aboutsecurity

What it does

Helps with ai & agent building tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

CTF Flag 验证方法论

核心原则

LLM 无法可靠地数 hex 字符或拼接长字符串。 所有 flag 的提取、拼接、验证必须用程序(Python)完成,绝不手动拼接。

强制验证流程

1.1 提取 flag 时优先使用程序化方法

SQL 注入(EXTRACTVALUE/UPDATEXML 分段提取):

  • ❌ 不要手动复制各段然后在思考中拼接
  • ✅ 写 Python 脚本自动发请求、自动分段、自动拼接(参考 sql-injection-methodology 中的 Python 模板)
  • ✅ 优先用 UNION SELECT(无截断限制,一次拿完整 flag)

命令执行(RCE / 命令注入):

  • ⚠️ cat /flag.txt 输出可能含 trailing newline → 用 flag.strip() 去除
  • ⚠️ 命令输出可能被 HTML 编码(&lt;<)→ 用 Python html.unescape() 解码
  • ⚠️ 如果回显被截断,改用 base64 /flag.txt 再解码

文件读取(LFI / 任意文件读取):

  • ⚠️ PHP file_get_contents 可能返回 base64 → 先解码
  • ⚠️ 通过 php://filter 读取时:php://filter/convert.base64-encode/resource=flag → 必须 base64 解码
  • ⚠️ 路径大小写敏感:/flag.txt/Flag.txt/FLAG.txt

Web 页面解析:

  • Flag 可能在 HTML 注释 <!-- flag{...} -->
  • Flag 可能在 HTML 属性 data-flag="flag{...}"
  • Flag 可能在 JavaScript 变量 var flag = "flag{...}"
  • 用 Python re.search(r'flag\{[a-fA-F0-9_-]+\}', html_text) 提取

1.2 长度验证

如果你通过 SQL LENGTH() 或其他方式获知了 flag 的预期长度,用 Python 验证:

flag = "flag{...extracted...}"
expected_length = 70  # 从 LENGTH() 获得
assert len(flag) == expected_length, f"MISMATCH! {len(flag)} != {expected_length}"

1.3 格式验证

import re
flag = "flag{...}"
assert re.match(r'^flag\{[a-fA-F0-9_-]+\}$', flag), f"Invalid format: {flag}"
assert flag.endswith('}'), "Missing } — flag 可能被截断"

1.4 验证失败的处理

1. 长度不匹配 → 重新提取。EXTRACTVALUE 改用 Python 自动脚本或 UNION SELECT 2. 格式不对 → 检查 HTML 编码、base64 编码、trailing whitespace 3. 多次失败 → 切换提取方法(EXTRACTVALUE → UNION → 盲注 → sqlmap --dump)

1.5 常见错误模式

错误原因解决
Flag 少 1-2 字符EXTRACTVALUE 32 字符截断 + 手动拼接Python 自动提取脚本
Flag 多 1-2 字符SUBSTRING 起始位置重叠检查 SUBSTRING 参数
Flag 中间有错字符LLM 误读 hex 字符Python re.search 提取
Flag 含 HTML 实体&amp; 未解码html.unescape()
Flag 有换行/空格命令输出含 whitespace.strip()
Flag 格式不对提取了错误数据重新确认表名/文件路径

1.6 字符级验证问题

  • Flag 中间丢失字符时,检查位置 29-32 区域,可能存在偏移错误导致遗漏字符
  • HTML 实体还原:&lt; 变成 <&amp; 变成 &,网页显示与源码不同,需解码还原
  • 示例:flag{a3b<c5d&e7f} — 渲染后不同于源码,解码后才是正确 flag

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.