跳到主要内容

Katana Web 爬虫与端点发现

Katana 是 ProjectDiscovery 的 Web 爬虫工具,适合在发现 HTTP 服务后继续收集 URL、接口路径、查询参数和 JavaScript 中暴露的端点。它和 GobusterFeroxbuster 的定位不同:目录枚举工具靠字典猜路径,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.txtsitemap.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, -jsonlJSONL 输出-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
只要带参数 URLkatana -u http://target/ -silent -jc -f qurl -o params.txt
动态页面katana -u http://target/ -hl -xhr -fx -j -o headless.jsonl
带 Cookiekatana -u http://target/ -H "Cookie: PHPSESSID=abc" -silent -jc
走 Burp 代理katana -u http://target/ -proxy http://127.0.0.1:8080 -silent
联动 Nucleikatana -u http://target/ -silent -jc | nuclei -severity medium,high,critical -silent

相关知识