| name | web-surface-mapping |
| description | 用于梳理授权 Web 目标的页面、接口、路径、参数和入口点。适合在已有 HTTP 服务列表后,组合 httpx、katana、ffuf、feroxbuster 和少量 nuclei 检查来整理 Web 暴露面。 |
Web 暴露面梳理
这份技能提供理解 Web 暴露面的思路和常用工具组合。根据站点规模、登录态、技术栈和已有证据选择最有价值的部分,不必机械执行全部步骤。
目标
把一组 Web 目标整理成可测试的入口清单:
- 存活 URL。
- 页面和接口。
- JavaScript 中的端点。
- 目录和文件路径。
- 表单和参数线索。
- 值得后续做 Nuclei、SQL 注入、认证逻辑或人工测试的入口。
适用输入
asset-discovery 生成的 web_targets.txt。
- 用户直接给出的 URL。
- Burp、浏览器、日志、Sitemap 或其他工具导出的 URL 列表。
- Nuclei/httpx 结果中的 Web 目标。
开始前先判断
先确认:
- 域名边界是什么。
- 是否允许递归爬取。
- 是否允许目录发现。
- 是否需要 Cookie、Header、代理或登录态。
- 是否有禁止访问的路径,例如登出、删除、支付、管理后台操作接口。
- 请求速率限制。
数据更新建议
下载量判断
Web 路径字典通常不是越大越好。单次任务中不要为了普通目录发现去下载大型字典。
默认策略:
- 使用镜像内置
seclists 和 wordlists。
- 如果用户提供字典,优先使用用户提供的字典。
- 只有小型字典或明确相关的专项字典才适合临时拉取。
- 预计超过 100 MB 的字典默认不下载。
- 大字典更适合在镜像构建或专门维护流程里准备。
Web 路径发现主要使用镜像内置的 seclists 和 wordlists。这些字典通常不需要在单次任务中临时更新。
不要为了普通目录发现临时下载大型字典。
如果用户明确要求更大的字典,应先说明可能耗时更长,再选择已有大字典或用户提供的字典,而不是盲目从网络拉取。
一种常见工作路径
这条路径从“哪些 URL 可达”逐步走向“有哪些可测试入口”。爬取、路径发现和模板检查是互补方法,可以按场景组合。
准备和规范化 URL
mkdir -p web/{input,raw,clean,final,notes}
准备 URL 列表:
cp recon/final/web_targets.txt web/input/urls.txt
或者手动写入:
cat > web/input/urls.txt <<'EOF'
https://example.com
EOF
确认可达性和真实落点
httpx -l web/input/urls.txt \
-silent \
-status-code \
-title \
-tech-detect \
-follow-redirects \
-json \
-o web/raw/httpx.jsonl
提取存活 URL:
jq -r '.url' web/raw/httpx.jsonl \
| sort -u > web/clean/live_urls.txt
生成摘要:
jq -r '[.url, (.status_code|tostring), (.title // ""), ((.tech // [])|join(","))] | @tsv' \
web/raw/httpx.jsonl > web/final/live_urls.tsv
从页面和前端应用发现入口
普通爬取优先:
katana -list web/clean/live_urls.txt \
-silent \
-jsonl \
-form-extraction \
-depth 2 \
-o web/raw/katana.jsonl
提取 URL:
jq -r '.request.endpoint // .url // empty' web/raw/katana.jsonl \
| sort -u > web/clean/katana_urls.txt
如果目标明显依赖前端渲染,再用 headless:
katana -list web/clean/live_urls.txt \
-silent \
-jsonl \
-headless \
-system-chrome-path /usr/bin/chromium \
-no-sandbox \
-form-extraction \
-depth 2 \
-o web/raw/katana_headless.jsonl
合并:
cat web/clean/live_urls.txt web/clean/katana_urls.txt web/raw/katana_headless.jsonl 2>/dev/null \
| grep -Eo 'https?://[^" ]+' \
| sort -u > web/clean/crawled_urls.txt
提取表单、提交入口和输入参数:
cat web/raw/katana.jsonl web/raw/katana_headless.jsonl 2>/dev/null \
| jq -c 'select((.response.forms // []) | length > 0) |
{source: .request.endpoint, forms: .response.forms}' \
| sort -u > web/final/forms_or_inputs.jsonl
用路径发现补充未链接资源
先对少量目标或重点目标用 ffuf:
while read -r url; do
safe_name="$(echo "$url" | sed 's#[/:]#_#g')"
ffuf -u "$url/FUZZ" \
-w /usr/share/seclists/Discovery/Web-Content/common.txt \
-mc all \
-fc 404 \
-rate 50 \
-of json \
-o "web/raw/ffuf_${safe_name}.json" || true
done < web/clean/live_urls.txt
如果站点层级较多,且用户允许递归发现,再用 feroxbuster:
feroxbuster -u https://example.com \
-w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt \
--rate-limit 50 \
--depth 2 \
--json \
-o web/raw/feroxbuster.json
理解参数和业务入口
从 URL 中提取带参数的接口:
cat web/clean/crawled_urls.txt 2>/dev/null \
| grep '?' \
| sort -u > web/final/parameterized_urls.txt
提取路径清单:
cat web/clean/crawled_urls.txt 2>/dev/null \
| sed -E 's#https?://[^/]+##' \
| cut -d'?' -f1 \
| sort -u > web/final/paths.txt
用低影响模板补充线索
只对整理后的 URL 做轻量检查:
nuclei -l web/clean/live_urls.txt \
-t /root/nuclei-templates/http/exposures/ \
-severity info,low,medium,high,critical \
-jsonl \
-rate-limit 20 \
-o web/raw/nuclei_exposures.jsonl
整理可供后续验证的入口
cat web/clean/live_urls.txt web/clean/crawled_urls.txt 2>/dev/null \
| sort -u > web/final/discovered_urls.txt
工具使用要点
httpx
适合确认 URL 存活、标题、状态码、技术栈。
httpx -l urls.txt -silent -status-code -title -tech-detect -follow-redirects -json -o httpx.jsonl
看结果时关注:
- 200、301、302、401、403、500 等状态码。
- 标题和技术栈。
- 跳转后的真实 URL。
- 认证页面、后台路径、错误页面。
katana
适合爬取链接、接口、JS 暴露端点。
katana -list urls.txt -silent -jsonl -form-extraction -depth 2 -o katana.jsonl
需要渲染:
katana -list urls.txt -silent -jsonl -headless -system-chrome-path /usr/bin/chromium -no-sandbox -form-extraction -depth 2 -o katana_headless.jsonl
要点:
- 默认深度 2 足够起步。
- 大站点不要无限加深。
- headless 模式更慢,只有必要时用。
- 爬到的 URL 是线索,不等于漏洞。
ffuf
适合路径、文件、参数位置 fuzz。
ffuf -u https://example.com/FUZZ \
-w /usr/share/seclists/Discovery/Web-Content/common.txt \
-mc all -fc 404 \
-rate 50 \
-of json -o ffuf.json
要点:
- 先识别通配响应,否则容易误报。
- 用
-rate 控制速率。
- 对状态变更接口做 fuzz 前,先理解业务影响并确认授权。
feroxbuster
适合递归目录发现。
feroxbuster -u https://example.com \
-w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt \
--rate-limit 50 \
--depth 2 \
--json \
-o feroxbuster.json
要点:
- 递归会放大请求量。
- 只对重点目标使用。
- 需要设置深度和速率。
值得保留的证据
- URL 的来源:用户输入、存活探测、跳转、爬取、JavaScript、字典发现或模板命中。
- URL 的真实落点、状态码、标题、技术栈和认证边界。
- 参数化接口、表单字段、业务动作、对象标识和角色相关入口。
- 被明确排除的状态变更路径、第三方域名和范围外跳转。
- 适合进入专项验证的高价值入口及其依据。
入口清单的价值不在数量,而在于是否能帮助理解应用边界和选择下一条验证路径。
判断与复核要点
- 说明每个入口来源:存活探测、爬取、字典发现、模板检查。
- 不把目录发现结果直接当漏洞。
- 对 401/403/后台路径标注“需要授权验证”。
- 对参数入口标注适合后续手工、Nuclei 或 SQL 注入验证。