---
name: ctf-web-recon
description: "CTF Web 挑战专用侦察方法。当面对 CTF 靶场目标需要快速发现攻击入口时使用。与真实渗透的 recon 不同——CTF 是单个应用、有意留线索、侦察应在 2-3 轮内完成。覆盖源码泄露、备份文件、隐藏路径、页面线索提取"
metadata:
  tags: "ctf,recon,侦察,源码泄露,备份文件,robots,git,web,enumeration"
  category: "ctf"
---

# CTF Web 侦察方法论

CTF 侦察和真实渗透的侦察本质不同：
- 真实渗透：大量资产，需要枚举子域名、扫端口、做指纹
- CTF：**单个 Web 应用，出题者故意留了线索**，侦察的目标是找到这些线索

核心原则：**2-3 轮内完成侦察**，不要在侦察上花太多 rounds。

## Phase 1: 侦察流程

### 1.1 首页分析

用 `http_request` GET 首页，仔细检查响应：

### HTTP 响应头
- `Server` — 服务器类型和版本（Apache/Nginx/Express）
- `X-Powered-By` — 后端语言（PHP/Express/ASP.NET）
- `Set-Cookie` — Cookie 格式（PHPSESSID=PHP, connect.sid=Node, JSESSIONID=Java）
- 非标准 Header — 出题者可能通过自定义 Header 给提示

### HTML 内容
- `<!-- 注释 -->` — CTF 出题者常在注释里留提示（密码、路径、漏洞类型）
- `<input type="hidden">` — 隐藏字段可能可以篡改
- `<form action="...">` — 表单提交地址暴露后端接口
- `<script src="...">` — JS 文件路径暴露项目结构
- 页面文字 — 有时提示就在页面内容里（"Try harder", "Look deeper"）

### 1.2 关键路径检查

按优先级依次检查（有发现就分析，不要机械地全部检查）：

### 信息泄露路径
```
/robots.txt          — 最常见的提示位置，Disallow 的路径往往是关键
/.git/HEAD           — Git 源码泄露（存在则用 githacker --brute 恢复完整仓库，含 stash/所有分支）
/.svn/entries        — SVN 泄露
/.DS_Store           — macOS 目录文件泄露
/crossdomain.xml     — Flash 跨域策略（可能暴露内部域名）
/.env                — 环境变量文件（数据库密码、API 密钥）
/composer.json       — PHP 依赖（暴露框架版本）
/package.json        — Node.js 依赖
```

### 备份文件
```
/www.zip, /www.tar.gz, /backup.zip     — 整站打包
/index.php.bak, /index.php~, /index.php.swp  — 编辑器备份
/flag.txt, /flag, /flag.php             — 直接读 flag（有时就这么简单）
/.index.php.swp                         — Vim swap 文件
```

### 管理入口
```
/admin, /admin.php, /login, /login.php
/console, /dashboard, /phpmyadmin
/api, /api/v1, /graphql
```

### 1.3 JavaScript 分析

如果首页引用了 JS 文件，用 `http_request` 获取它们，搜索：

- API 端点路径（`/api/`, `fetch(`, `axios.`）
- 硬编码凭据（`password`, `token`, `secret`, `key`）
- 隐藏功能（`admin`, `debug`, `test`）
- 注释中的提示

**技巧**：压缩/混淆的 JS 不需要完全理解，搜索关键字符串即可。

### 1.4 技术栈确认

通过前面的信息确认技术栈，这决定了后续的漏洞利用方向：

| 线索 | 技术栈 | 常见漏洞 |
|------|--------|----------|
| `.php` 后缀, PHPSESSID | PHP | LFI, 反序列化, 文件上传 |
| `express`, connect.sid | Node.js | 原型链污染, SSTI(EJS) |
| JSESSIONID, `.jsp` | Java | 反序列化, JNDI, SpEL |
| `_csrf_token`, `csrfmiddlewaretoken` | Python Django | SSTI(Jinja2) |
| `session=eyJ` | Python Flask | Flask session 伪造 |

## Phase 2: 侦察补充

### 2.1 不要做的事
- ❌ 不要对 CTF 目标做子域名枚举（只有一个应用）
- ❌ 不要做大规模端口扫描（通常只有一个端口）
- ❌ 不要花超过 3 轮在侦察上（线索不在侦察里就在功能点里）

### 2.2 技术指纹判断
- NoSQL/MongoDB 特征：尝试 `$gt`、`$ne` 等 NoSQL 注入操作符

### 2.3 CTF 效率
- CTF 单应用：不做子域名枚举、不做大规模端口扫描
