# 各技术栈检查清单

按"先认栈、再照清单扫"的顺序用。每项都写清楚"看什么、怎么判、结论写哪"。

---

## A. WordPress（重点）

### A1. 指纹与版本

| 位置 | 说明 |
|---|---|
| `/readme.html` | 直接给主版本（如 `Version 6.4`），命中就记下来 |
| 首页源码 `meta name="generator"` | `WordPress 6.x` |
| `/?feed=rss2` 的 `<generator>` | 同上 |
| `/wp-includes/js/wp-emoji-release.min.js?ver=6.4.2` | 精确小版本 |
| `/wp-content/themes/<主题>/style.css` | 主题名 + `Version:` |
| `/wp-json/` | 返回 `name/description/namespaces`，顺手暴露插件命名空间 |

版本只用来**比对已知 CVE**，不要拿版本号直接当漏洞写。

### A2. 用户枚举

| 路径 | 预期 |
|---|---|
| `/?author=1` | 302 到 `/author/<登录名>/`，暴露 admin 登录名 |
| `/wp-json/wp/v2/users` | 未授权时返回 `id/name/slug`（很多站默认开放） |
| `/?rest_route=/wp/v2/users` | 同上，用于 `/wp-json/` 被重写规则挡住时 |
| `/wp-json/wp/v2/users/1` | 单用户详情 |
| oEmbed `/?rest_route=/oembed/1.0/embed&url=<文章URL>` | 返回作者信息 |
| 登录页报错差异 | "用户名不存在" vs "密码错误" |

登录名 + 弱口令 = 后台接管，这是 WP 最常见的实战路径。

### A3. REST API

- `GET /wp-json/` 列出所有路由，重点看有没有 `permission_callback` 缺失的自定义端点（插件常犯）；
- `POST /wp-json/wp/v2/posts` 未授权创建 → 内容注入（可挂外链、可存储 XSS）；
- `POST /wp-json/wp/v2/media` 未授权上传 → 结合 MIME 校验缺失可 getshell；
- `POST /wp-json/wp/v2/users` 未授权建号 → 直接提权；
- `?rest_route=` 形式可绕过部分 WAF 对 `/wp-json/` 的规则。

### A4. xmlrpc.php

```bash
# 是否开放
curl -s -X POST https://target/xmlrpc.php -d '<methodCall><methodName>system.listMethods</methodName><params></params></methodCall>'
```

- 开放即可用 `wp.getUsersBlogs` 尝试口令（**注意限速，只试少量**）；
- `system.multicall` 可放大请求数（同样要限速）；
- `pingback.ping` 常被用来做 SSRF / 内网探测。

若开放但无有效口令，按"信息/低危"记录，不要硬爆。

### A5. 插件与主题

| 手法 | 说明 |
|---|---|
| 源码里的 `?ver=` | 首页/文章页引用的 css/js 版本号即插件版本 |
| `/wp-content/plugins/<slug>/readme.txt` | `Stable tag:` 就是版本 |
| `/wp-content/plugins/` | 目录列表开启时直接列全部插件 |
| `/wp-json/wp/v2/plugins` | 需管理员权限，拿到 admin 后可读全量 |
| 常见高价值插件 | 表单类（CF7）、页面构建（Elementor）、电商（WooCommerce）、缓存（LiteSpeed/WP Rocket）、备份（UpdraftPlus/AI1WM）、文件管理（WP File Manager） |

只对"确认版本 + 确认存在对应 CVE"的插件做验证，**不盲打 POC**。

### A6. 文件与备份

```
/wp-config.php.bak      /wp-config.php~
/wp-config.php.swp      /wp-config.php.save
/wp-config.php.old      /wp-config.txt
/.env                   /.git/config
/wp-content/debug.log   /wp-content/uploads/（目录列表）
/wp-content/ai1wm-backups/   /wp-content/updraft/
/wp-content/backup*     
```

拿到 `wp-config.php` 等同拿到 DB 凭据；拿到备份包等同拿到全站源码 + 数据库。

### A7. 上传与执行

- `/wp-content/uploads/` 能列目录 → 记"目录列表"（低危）；
- 上传 `.php` 后访问是否被执行（多数站点 nginx 规则禁止，**先确认再下结论**）；
- 主题/插件编辑器（外观 → 主题文件编辑器）需要 admin，属"后台 RCE"，与"上传"分开写。

### A8. 认证与业务

- `wp-login.php`：无失败锁定、无验证码 → 弱口令可爆破（**只做少量验证**）；
- `wp-login.php?action=register` 开放注册 → 结合默认角色可发文章/上传；
- `redirect_to` 参数 → 开放重定向；
- 密码重置邮件枚举 → 用户枚举的替代通道；
- `wp-cron.php` 外部可触发 → 低危（可被刷）。

### A9. 缓存类插件

- WP Super Cache / W3TC / LiteSpeed 的缓存文件在 `/wp-content/cache/`；
- 登录态页面被缓存 → 跨用户信息泄露（与通用缓存欺骗一类）；
- 缓存键不含 Cookie 时，匿名请求可能拿到登录页快照。

### A10. WP 定级速查

| 情况 | 等级 |
|---|---|
| 未授权 REST 建号/改配置 | 严重 |
| 插件已知 RCE 且版本匹配、可执行 | 严重 |
| 后台弱口令进入 + 可装插件 | 严重 |
| 用户枚举 + xmlrpc 开放 | 低危 / 信息 |
| 上传目录可列、debug.log 可读 | 低危 |
| 未授权发评论/发文章 | 中危（可挂外链、可存储 XSS） |

---

## B. ASP.NET / WebForms

| 检查 | 方法 | 结论要点 |
|---|---|---|
| ViewState MAC | 改 `__VIEWSTATE` 任意一位看是否报 MAC 校验失败 | 开启 = 不能反序列化攻击；关闭 = 高危 |
| `.ashx` 接口 | 从前端 JS 里提取所有 `*.ashx`，逐个 GET/POST | 常是"没有页面只有接口"的隐藏 API |
| Cookie 注入 | `Cookie: userid=1/0`、`1+@@version` | WAF 多半只查 URL，Cookie 是突破口 |
| 错误页 | 触发 500 看是否回显堆栈/表名/路径 | `customErrors=Off` = 信息泄露 |
| 隐藏页 | `trace.axd`、`elmah.axd`、`Stats.aspx`、`web.config`、`/bin/` | 遗留页常带表名或调试信息 |
| 后台 | `/myadmin/`、`/admin/`、默认口令、菜单外页面直接访问 | 菜单隐藏 ≠ 鉴权 |
| 上传 | `FileUpload1`、`imageUp.ashx` | 判四重：白名单/内容/改名/静态域 |
| SQL 堆叠 | `;WAITFOR DELAY '0:0:5'--` | 不支持堆叠时，写入类操作基本无解 |
| 提权面 | `IS_SRVROLEMEMBER('sysadmin')`、`TRUSTWORTHY`、`xp_cmdshell` | 逐项判定，别一句"可能提权" |

---

## C. PHP 通用（非 WP）

- **LFI**：`?file=../../etc/passwd`、`php://filter/convert.base64-encode/resource=index.php`（读源码）；
- **上传**：后缀黑名单绕过（`.phtml/.pht/.php5`、`%00`、双后缀、`.htaccess` 覆盖）；
- **反序列化**：找 `unserialize($_GET/$_POST/$_COOKIE)`，配合 `__destruct/__wakeup`；
- **SSRF**：`?url=`、`?image=`、webhook、导入远程图片；
- **命令执行**：`system/exec/shell_exec/popen` 的输入是否可控；
- **信息泄露**：`phpinfo.php`、`/.env`、`/.git/config`、`/backup.zip`、`/debug.log`；
- **错误页**：`display_errors=On` 会直接给路径与 SQL。

---

## D. Java / Spring

| 面 | 路径/特征 |
|---|---|
| Actuator | `/actuator`、`/actuator/env`、`/actuator/heapdump`、`/actuator/gateway/routes` |
| Swagger | `/v2/api-docs`、`/swagger-ui.html`、`/doc.html` |
| 框架 | Shiro（`rememberMe` 反序列化）、Fastjson（`@type`）、Log4j2（`${jndi:}`） |
| 旧组件 | Struts2（`ognl`）、Jolokia（`/jolokia/exec`） |
| 常见配置错 | 默认密钥、`/error` 回显堆栈、H2 console 暴露 |

Java 站点优先看"组件版本 + 已知 CVE"，而不是手工注入。

---

## E. Node / 前端

- **原型污染**：`?__proto__[x]=1`、JSON body 里的 `__proto__`；旧版 jQuery 的 `$.extend(true, ...)`；
- **SSRF**：图片代理、URL 预览、webhook；
- **JWT**：`alg: none`、弱密钥、`kid` 注入；
- **依赖**：`package.json` 泄露、`node_modules` 目录列表；
- **模板注入**：`{{7*7}}`、`${7*7}`（看是否渲染成 49）。

---

## F. 基础设施与通用项

| 项 | 检查 |
|---|---|
| WAF | 已知 payload 被拦 → 换位置（Cookie/Header）、换编码、换分隔符 |
| CDN / 源站 | 历史 DNS、证书 SAN、`admin.` 别名、直连 IP 是否绕 CF |
| 缓存 | `Cache-Control`、`cf-cache-status`、`age`；缓存键与内容是否错配 |
| 响应头 | `X-Frame-Options`、`CSP`、`HSTS`、`Server`、`X-Powered-By` |
| Cookie | `HttpOnly`、`Secure`、`SameSite`；是否有 JS 可读的身份字段 |
| 子域 | 泛解析、测试域、`tools.`、`admin.`、`m.`、`api.` |
| 端口 | 21/22/3306/3389/6379/9200（只做连通性判断，不做爆破） |
| 邮箱域 | SPF/DKIM/DMARC，是否存在 SPF 冲突 |
