ctf-flag-verification
$
npx mdskill add wgpsec/AboutSecurity/ctf-flag-verificationVerify CTF flags against hidden characters and encoding errors.
- Prevents submission failures from truncated or malformed flag strings.
- Depends on Python scripts for hex decoding, base64 conversion, and HTML unescaping.
- Automatically triggers when any flag-like pattern is detected in output.
- Returns validated flag strings with corrected encoding or stripped whitespace.
SKILL.md
.github/skills/ctf-flag-verificationView on GitHub ↗
---
name: ctf-flag-verification
description: "CTF/靶场 Flag 强制验证流程。当通过**任何方式**发现疑似 flag 字符串(含 flag{、FLAG{、ctf{ 等格式)时**必须立即**使用此 skill 验证,不要直接提交。防止因字符截断、编码错误、HTML 实体、base64 不完整解码、hex 截断等原因导致提交错误 flag。即使 flag 看起来完整,也可能存在隐藏字符或编码问题。覆盖 SQL 注入分段提取、命令执行输出截断、文件读取编码、Web 页面解析等所有 flag 提取场景。任何时候看到 flag{ 字样都应触发此 skill"
metadata:
tags: "ctf,flag,验证,capture the flag,靶场,flag验证,sqli,rce,lfi,file-read,提交,flag{,疑似flag,flag格式,flag截断,编码还原,hex,base64解码,字符截断,HTML实体,提取验证"
category: "ctf"
---
# 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 编码(`<` → `<`)→ 用 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 验证:
```python
flag = "flag{...extracted...}"
expected_length = 70 # 从 LENGTH() 获得
assert len(flag) == expected_length, f"MISMATCH! {len(flag)} != {expected_length}"
```
### 1.3 格式验证
```python
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 实体 | `&` 未解码 | `html.unescape()` |
| Flag 有换行/空格 | 命令输出含 whitespace | `.strip()` |
| Flag 格式不对 | 提取了错误数据 | 重新确认表名/文件路径 |
### 1.6 字符级验证问题
- Flag 中间丢失字符时,检查位置 29-32 区域,可能存在偏移错误导致遗漏字符
- HTML 实体还原:`<` 变成 `<`,`&` 变成 `&`,网页显示与源码不同,需解码还原
- 示例:`flag{a3b<c5d&e7f}` — 渲染后不同于源码,解码后才是正确 flag
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|