Katana Web 爬虫与端点发现
Katana 是 ProjectDiscovery 的 Web 爬虫工具,适合在发现 HTTP 服务后继续收集 URL、接口路径、查询参数和 JavaScript 中暴露的端点。它和 Gobuster、Feroxbuster 的定位不同:目录枚举工具靠字典猜路径,Katana 主要根据页面、链接、脚本和表单继续“顺藤摸瓜”。
在靶场和授权测试里,Katana 常用来给 Nuclei 提供更完整的 URL 输入,尤其适合动态路由、前端框架、API 参数较多的目标。
安装
Go Install
go install github.com/projectdiscovery/katana/cmd/katana@latest
安装后确认 $HOME/go/bin 已加入 PATH:
katana -version
Docker
docker pull projectdiscovery/katana:latest
docker run --rm projectdiscovery/katana:latest -u http://target/
二进制安装
从 Katana Releases 下载对应系统的压缩包,解压后把 katana 放到 PATH 中。
核心参数速查
| 参数 | 说明 | 示例 |
|---|---|---|
-u, -list | 指定单个 URL 或 URL 列表 | -u http://target/ |
-d, -depth | 最大爬取深度,默认 3 | -d 3 |
-jc, -js-crawl | 解析 JavaScript 文件中的端点 | -jc |
-kf, -known-files | 爬取常见文件,如 robots.txt、sitemap.xml | -kf all |
-hl, -headless | 启用浏览器混合爬取,适合强依赖 JS 的站点 | -hl |
-fx, -form-extraction | 在 JSONL 输出中提取表单字段 | -fx -j |
-xhr, -xhr-extraction | 提取 XHR 请求,需配合 headless | -hl -xhr -j |
-cs, -crawl-scope | 限定允许继续爬取的 URL 正则 | -cs target.com |
-cos, -crawl-out-scope | 排除不应继续爬取的 URL 正则 | -cos logout |
-f, -field | 只输出指定字段 | -f qurl |
-em | 只匹配指定扩展名 | -em js,php |
-ef | 过滤指定扩展名 | -ef png,jpg,css |
-mr | 只保留匹配正则的 URL | -mr "id=" |
-fr | 过滤匹配正则的 URL | -fr "logout" |
-H, -headers | 自定义请求头或 Cookie | -H "Cookie: PHPSESSID=abc" |
-proxy | 走代理,便于 Burp 抓包 | -proxy http://127.0.0.1:8080 |
-rl, -rate-limit | 每秒最大请求数 | -rl 20 |
-o, -output | 输出到文件 | -o katana_urls.txt |
-j, -jsonl | JSONL 输出 | -j |
-silent | 只输出结果 | -silent |
常用爬取模式
1. 单目标快速爬取
katana -u http://192.168.1.108/ -silent -d 2 -o katana_urls.txt
适合在 Nmap 发现 HTTP 端口后快速收集页面和链接。
2. 启用 JavaScript 端点解析
katana -u http://192.168.1.108/ -silent -d 3 -jc -o katana_js_urls.txt
现代 Web 应用经常把 API 路径、路由和参数写在 JS 中。-jc 是 Katana 的高价值参数,建议在常规爬取后补一轮。
3. 读取 URL 列表批量爬取
katana -list http_urls.txt -silent -d 2 -jc -o katana_all_urls.txt
http_urls.txt 可以来自 Nmap、httpx、手工整理的端口列表,或者前一阶段扫描结果。
4. Headless 爬取动态页面
katana -u http://target/ -hl -xhr -fx -j -o katana_headless.jsonl
当页面由前端框架动态渲染,普通 HTTP 爬取拿不到接口时,再启用 headless。它更重、更慢,不建议一开始就全量使用。
5. 只提取带参数的 URL
katana -u http://target/ -silent -jc -f qurl -o katana_params.txt
带参数的 URL 往往更适合继续做 LFI、SQLi、XSS、SSRF 等检测。这里建议先保存,再进入 Nuclei 或手工验证。
6. 限定作用域
katana -u https://www.example.com/ -silent -d 3 -cs "example.com" -cos "logout|signout"
授权测试时务必控制作用域。对真实目标尤其要避免爬到第三方域名、退出登录链接、删除操作或不可逆接口。
和 Nuclei 联动
Katana 的典型价值是把“目标首页”扩展成“可测试 URL 集合”,再交给 Nuclei 做模板检测。
保存后扫描
katana -u http://target/ -silent -jc -d 3 -o katana_urls.txt
nuclei -l katana_urls.txt -severity medium,high,critical -silent -o nuclei_findings.txt
管道联动
katana -u http://target/ -silent -jc -d 3 | nuclei -severity medium,high,critical -silent
DAST / Fuzz 场景
katana -u http://target/ -silent -jc -f qurl | nuclei -dast -severity medium,high,critical -silent
-dast 会启用 Nuclei 的 DAST fuzz 模板,适合对带参数的 URL 做更主动的检测。它比普通模板扫描更有侵入性,只应在靶场或授权范围内使用。
在靶场流程中的位置
1. RustScan / Nmap 发现 HTTP 端口
2. Gobuster / Feroxbuster 发现隐藏目录和文件
3. Katana 爬取页面、JS、参数和 API 端点
4. Nuclei 对收集到的 URL 做模板扫描
5. 对高价值入口做手工验证和利用
Katana 不应该替代目录枚举。它更像 Web 侦察的补充层:目录枚举负责“猜隐藏路径”,Katana 负责“跟已有线索继续扩展”。
靶场实战速查
| 场景 | 命令 |
|---|---|
| 快速爬取 | katana -u http://target/ -silent -d 2 -o urls.txt |
| 解析 JS 端点 | katana -u http://target/ -silent -jc -d 3 -o js_urls.txt |
| 只要带参数 URL | katana -u http://target/ -silent -jc -f qurl -o params.txt |
| 动态页面 | katana -u http://target/ -hl -xhr -fx -j -o headless.jsonl |
| 带 Cookie | katana -u http://target/ -H "Cookie: PHPSESSID=abc" -silent -jc |
| 走 Burp 代理 | katana -u http://target/ -proxy http://127.0.0.1:8080 -silent |
| 联动 Nuclei | katana -u http://target/ -silent -jc | nuclei -severity medium,high,critical -silent |
相关知识
- Nuclei 模板化漏洞扫描 — 对 Katana 收集到的 URL 做模板检测
- Gobuster 目录与子域名枚举 — 字典式路径发现
- Feroxbuster 递归目录扫描 — 递归深入目录树
- Nmap 服务识别与脚本扫描 — 确认 HTTP 服务和端口信息