ctf-flag-hunting
$
npx mdskill add wgpsec/AboutSecurity/ctf-flag-huntingSearches for CTF flags across filesystems, databases, and environments.
- Locates hidden flags when standard commands fail to reveal them.
- Executes prioritized searches based on command execution or file read permissions.
- Uses find, grep, and env commands to scan standard and non-standard paths.
- Returns flag content directly from discovered files or database queries.
SKILL.md
.github/skills/ctf-flag-huntingView on GitHub ↗
---
name: ctf-flag-hunting
description: "CTF 挑战中的 Flag 搜索策略。当通过 RCE/LFI/SQLi/webshell 等方式获得目标访问权限后、使用常规 ls/cat 命令找不到 flag 时使用。覆盖文件系统、数据库、环境变量、源码、内存等所有 flag 可能的存储位置。按成功率排序的搜索优先级——先试标准路径,再搜索全盘"
metadata:
tags: "ctf,flag,搜索,hunting,文件系统,数据库,环境变量,rce,getflag"
category: "ctf"
---
# CTF Flag 搜索策略
## ⛔ 深入参考(补充读物)
- 完整搜索路径和命令 → [references/flag-search-paths.md](references/flag-search-paths.md)
- 本 skill 已包含核心搜索路径,references 用于补充极端情况
---
## Phase 1: 按权限类型选择搜索策略
```
你有什么权限?
├─ 命令执行(RCE)→ Phase 2
├─ 文件读取(LFI)→ Phase 3
├─ 数据库访问(SQLi)→ Phase 4
└─ Web 管理后台 → Phase 5
```
---
## Phase 2: RCE — 文件系统搜索
**优先级顺序(按成功率排列):**
### 2.1 标准 flag 路径(先试这些,一次试完)
```bash
cat /flag.txt && cat /flag && cat /root/flag.txt && cat /home/*/flag.txt
```
### 2.2 非标准路径(标准路径失败后)
```bash
cat /var/www/html/flag.txt
cat /var/www/html/flag.php
cat /tmp/flag
cat /tmp/flag.txt
cat /opt/flag.txt
cat /app/flag.txt
```
也可以看看路径下的文件名
```bash
ls /root
ls /tmp
```
### 2.3 全盘搜索(路径不确定时)
```bash
find / -name "flag*" 2>/dev/null
find / -name "*.txt" -path "*/flag*" 2>/dev/null
grep -r "flag{" / --include="*.txt" --include="*.php" --include="*.html" 2>/dev/null
```
### 2.4 环境变量和进程
```bash
env | grep -i flag
cat /proc/self/environ | tr '\0' '\n' | grep -i flag
cat /proc/self/cmdline | tr '\0' '\n' | grep -i flag
```
### 2.5 数据库配置 → 查库
```bash
cat /var/www/html/config.php # 数据库连接凭据
cat /var/www/html/.env # 环境变量泄露
cat /app/config.py
```
找到数据库凭据后:
```bash
mysql -u <user> -p<password> -e "SHOW DATABASES; USE <db>; SHOW TABLES; SELECT * FROM flag;"
```
### 2.6 进程和网络
```bash
ps aux | grep -i flag # 进程命令行参数
netstat -tlnp # 内网服务可能有 flag
lsof -i # 开放端口对应的服务
```
---
## Phase 3: LFI — 文件读取搜索
LFI 比 RCE 限制更多——只能读文件,不能执行命令。
**路径遍历找 flag 时,对每个深度同时尝试多种文件名变体:**
```
# 每个深度都要批量测试这些变体(不要只试 flag 不试 flag.txt!)
../flag ../flag.txt ../.flag ../flag.md
../../flag ../../flag.txt ../../.flag
../../../flag ../../../flag.txt ../../../.flag
# 同时测试绝对路径
/flag /flag.txt /root/flag.txt /tmp/flag
```
> ⚠️ **常见失败模式**:只尝试 `../flag` 而忽略 `../flag.txt`,导致超时。务必同时发送带后缀和不带后缀的变体。
**优先级顺序:**
1. **标准 flag 路径**:对每个深度(`../`、`../../`、`../../../`)同时尝试 `flag`、`flag.txt`、`.flag`、`flag.md`
2. **确认可读性**:`/etc/passwd` 能读 → 说明 LFI 有效
3. **配置文件**(找更多凭据):
```
/var/www/html/config.php
/var/www/html/.env
/proc/self/environ
/proc/self/mounts
```
4. **源码文件**:`/var/www/html/index.php`、`/app/app.py` — 可能发现 RCE 入口
5. **日志文件**:`/var/log/apache2/access.log` — 日志投毒准备
---
## Phase 4: SQLi — 数据库搜索
```sql
-- 1. 列出现有数据库
SHOW DATABASES;
-- 2. 切换后列出表
USE <db>;
SHOW TABLES;
-- 3. 直接查 flag 表
SELECT * FROM flag;
SELECT * FROM flags;
SELECT * FROM secret;
SELECT * FROM secret_table;
-- 4. 不知道表名时搜索
SELECT table_name, column_name FROM information_schema.columns WHERE column_name LIKE '%flag%';
-- 5. 读取文件(需要 FILE 权限)
SELECT LOAD_FILE('/flag.txt');
```
---
## Phase 5: Web 管理后台搜索
1. **翻遍所有页面** — flag 可能在非标准页面("关于"、"帮助"、"调试")
2. **用户相关字段** — notes、bio、email、description 中可能藏 flag
3. **系统配置页** — 「系统信息」「服务器状态」可能显示 flag
4. **文件管理/模板编辑** — 可写文件时直接部署 webshell
5. **源码注释** — 搜索 HTML 注释、JS 注释中的 flag 字符串
---
## Phase 6: 搜不到 flag 时
标准路径都试过仍找不到,尝试以下降级手段:
1. **切换提取方式**:
- RCE 盲注:利用时间延迟或 DNS 外带逐字符提取
- LFI 配合竞争条件或 PHP session 包含
2. **扩大搜索范围**:
- 数据库其他表:`SELECT * FROM users LIMIT 10;` — flag 可能泄露在用户数据里
- 历史命令:`history` — 之前做过的操作可能遗留 flag 路径
3. **找其他入口**:
- 翻 Jenkins/GitLab/后台管理 — 也许有 flag 公开在那
- 检查 nginx/apache 配置文件:`/etc/nginx/sites-enabled/` — 路径映射可能泄露
4. **利用题目暗示**:
- 题目名称往往暗示 flag 位置(如 `baby_pwn` → pwn 类题目)
- 描述中的关键词("database"、"source")指向搜索方向
---
## Flag 格式识别
- `flag{hex_string}` — 最常见,32/40/64 字符
- `flag{string}`、`CTF{string}` — 小写或其他前缀
- 纯字符串(题目会说明)
**假 flag 陷阱**:`flag{test}`、`flag{this_is_not_the_flag}` 是迷惑项。
---
## 注意事项
- **先验证再提交**:拿到 flag 后用 `ctf-flag-verification` 验证格式和长度
- **假 flag 判断**:长度/字符异常,很可能是迷惑项
- **LFI 优先读配置**:配置文件能告诉你数据库密码,从数据库找 flag 比猜路径可靠
- **RCE 优先查库**:很多 CTF 的 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|