站点爬取策略方法论
0. 立即执行摘要:爬虫输出必须变成测试入口,而不是 URL 列表
爬取阶段的目标是发现所有可交互入口,并为每个入口标记候选漏洞。每个页面/接口至少要记录:身份、触发动作、请求、参数、响应、对象归属字段、候选 skill。如果只保存 URL,不记录参数和触发动作,后续 LLM 会漏测。
三遍爬取之外,必须额外覆盖:
- JS bundle/source map 中隐藏 API。
- Swagger/OpenAPI/GraphQL schema。
- WebSocket/Socket.IO 端点。
- 上传、导入、导出、下载、预览、支付、优惠券、审批、邀请、分享、Webhook。
- 移动端/小程序/旧版本 API 与 Web API 差异。
核心原则:三遍爬取法
一个网站至少要爬三遍才算完整:
| 轮次 | 身份 | 目的 |
|---|---|---|
| 第一遍 | 未登录 | 发现公开页面、登录/注册入口、公开 API |
| 第二遍 | 普通用户 | 发现登录后功能、用户专属页面、业务 API |
| 第三遍 | 管理员(如有) | 发现管理功能、对比与普通用户的差异 |
对比不同角色看到的差异本身就是越权检测的第一步。
Phase 0.1: 未登录爬取
页面发现
- 从首页开始,递归跟踪所有
<a href>链接 - 检查
robots.txt— 它告诉你网站不想被看到的路径 - 检查
sitemap.xml— 网站主动暴露的全部路径 - 检查常见路径:
/admin/login/register/api/docs/swagger
元素发现
每个页面上,提取并点击:
- 所有
<a>链接 - 所有
<button>按钮 - 所有
<form>表单(先不提交) - 所有
[onclick]元素 - 所有
[role=button]元素 - 导航栏/侧边栏的所有菜单项(包括需要 hover 展开的)
请求记录
通过代理抓包记录:
- 页面加载时的所有 XHR/Fetch 请求(很多 SPA 应用的 API 在这里)
- 点击元素后触发的请求
- 每个请求的方法、URL、参数、响应格式
Phase 0.2: 登录后爬取
登录方式
- 用用户提供的账号密码登录
- 如果没提供账号,尝试注册一个
- 登录后保存 Cookie/Token
登录后发现
登录后会出现大量新内容:
- 用户中心/个人设置
- 订单/交易记录
- 充值/提现/钱包
- 消息/通知
- 收藏/关注
对比未登录
记录登录前后的差异:
- 新出现了哪些页面?
- 新出现了哪些 API?
- 同一个 API,登录前后返回的数据有什么不同?
Phase 0.3: 隐藏端点发现
JS 文件分析
- 收集页面加载的所有
.js文件 - 在 JS 中搜索 API 路径模式:
/api//v1//v2/ - 搜索关键词:
fetch(axios.$.ajaxXMLHttpRequest - 提取出的路径可能包含未在页面上暴露的管理 API
响应分析
- 检查每个 API 响应中是否有其他 API 的 URL
- 检查 HTML 注释中是否有隐藏链接
- 检查
<script>标签中的配置变量(常含 API 地址)
路径推测
发现 /api/user/info 后,推测可能存在:
/api/user/list/api/user/delete/api/user/update/api/admin/user/list(管理端)/api/v2/user/info(新版本)
Phase 0.4: 表单智能填写
字段识别
对每个表单的输入框,根据 name/type/placeholder 判断含义:
usernameemailphone→ 身份信息passwordpasswdpwd→ 密码amountpricemoney→ 金额(高优先级!)codecaptchaverify→ 验证码iduser_idorder_id→ 对象标识符(高优先级!)
填写策略
- 文本框:填合理的测试数据
- 下拉框:选第一个非空选项
- 单选框:选第一个
- 文件上传:暂时跳过(Phase 2 再测)
- 验证码:如果是图片验证码,标记为"需要人工介入"
提交并跟踪
提交表单后:
- 记录提交的请求(方法、URL、参数)
- 记录响应(成功/失败/跳转)
- 如果跳转到新页面,继续爬取新页面
Phase 0.5: 爬取结果到漏洞假设映射
| 爬取发现 | 候选漏洞 | 后续 skill |
|---|---|---|
| 登录后新增 API | 未授权、认证绕过 | no-auth-quick-test、auth-bypass-methodology |
| URL/参数含对象 ID | IDOR/BOLA | idor-methodology |
| 表单含金额/数量/价格/优惠券 | 业务逻辑漏洞 | business-logic-attack |
表单含 role/is_admin/status |
权限提升/Mass Assignment | privilege-escalation-web |
| 搜索/筛选/排序 | SQLi/XSS/NoSQL | sql-injection-methodology、xss-methodology、nosql-injection |
| 文件上传/导入 | 上传漏洞/XXE/ZIP Slip | file-upload-methodology、xxe-injection-methodology |
| 下载/导出/预览 | IDOR/LFI/SSRF | idor-methodology、lfi-rfi-methodology、ssrf-methodology |
| 第三方登录/回调 | OAuth/SSO/Open Redirect | oauth-sso-attack、open-redirect |
| WebSocket | CSWSH/消息越权 | websocket-attack |
| GraphQL | BOLA/批量/Introspection | graphql-methodology |
最低必测自检
标记爬取完成前必须确认:
- 已完成未登录、普通用户、管理/高权限角色(如有)的三遍爬取。
- 已点击按钮、菜单、hover 展开项、分页、筛选、导出、上传、弹窗、表单提交。
- 已提取 JS 中 API、配置、source map、隐藏路由和注释。
- 已记录每个请求的参数、身份要求、响应类型和候选漏洞。
- 已对登录前后、多角色之间的新增页面/API 做差异清单。
输出格式
[爬取入口]
页面/功能:
触发动作:访问/点击/提交/上传/导出/筛选/分页/hover/自动加载
身份:未登录/普通用户/管理员/租户/未知
请求:METHOD URL
参数:path/query/body/header/cookie/file/ws/graphql
响应:HTML/JSON/文件/跳转/错误/WebSocket/未知
对象字段:id/user_id/order_id/file_id/tenant_id/无
候选漏洞:
建议 skill:
优先级:P0/P1/P2/P3