如果您有疑问,请通过帮助联系我们。
运行 Katana
Katana 需要一个 URL 或端点来爬取,并且接受单个或多个输入。 可以使用 -u 选项提供 URL,多个值可以通过逗号分隔输入,同样,文件输入可以使用 -list 选项,此外还支持管道输入(stdin)。Katana 的输入方式
可以使用 -u 选项提供 URL,多个值可以通过逗号分隔输入,同样,文件输入可以使用 -list 选项,此外还支持管道输入(stdin)。URL Input
多个 URL 输入(逗号分隔)
文件列表输入
STDIN (piped) 输入
爬取模式
标准模式
标准爬取模式在底层使用标准的 Go HTTP 库来处理 HTTP 请求/响应。由于没有浏览器开销,这种模式速度更快。但是它只会按原样分析 HTTP 响应体,不会执行任何 JavaScript 或 DOM 渲染,这可能会遗漏一些在复杂 Web 应用中依赖于浏览器特定事件的后期 DOM 渲染端点或异步端点调用。无头模式
无头模式通过在浏览器上下文中直接处理 HTTP 请求/响应来实现。这提供了两个优势:- HTTP 指纹(TLS 和用户代理)可以将客户端完全标识为合法浏览器
- 覆盖范围更广,因为端点发现不仅分析标准原始响应(如前一种模式),还会分析启用了 JavaScript 的浏览器渲染响应。
-headless 选项启用。
以下是其他无头模式的命令行选项 -
-no-sandbox
使用 no-sandbox 选项运行无头 Chrome 浏览器,这在以 root 用户运行时很有用。
-no-incognito
在无头模式下运行Chrome浏览器时不使用隐身模式,这在使用本地浏览器时很有用。
-headless-options
在无头模式下爬取时,可以使用
-headless-options 指定额外的 Chrome 选项,例如:
范围控制
如果不限定范围,爬取可能会无休止地进行,因此 katana 提供了多种方式来定义爬取范围。-field-scope
最方便的范围定义选项,使用预定义的字段名称,默认使用
rdn 作为字段范围。
rdn- 爬取根域名及其所有子域名范围 (例如*example.com) (默认)fqdn- 爬取指定的(子)域名范围 (例如www.example.com或api.example.com)dn- 爬取域名关键词范围 (例如example)
-crawl-scope
对于高级范围控制,可以使用支持正则表达式的
-cs 选项。
-crawl-out-scope
要定义不爬取的内容,可以使用
-cos 选项,该选项也支持正则表达式输入。
-no-scope
Katana 默认的作用域是
*.domain,要禁用此默认作用域可以使用 -ns 选项,这样也可以爬取整个互联网。
-display-out-scope
默认情况下,当使用范围选项时,它也会应用于显示为输出的链接,因此外部 URL 默认被排除。要覆盖此行为,可以使用 -do 选项来显示目标范围内 URL/端点中存在的所有外部 URL。
-depth
用于定义爬取 URL 的
depth(深度)的选项,深度越大,爬取的端点数量越多,爬取时间也越长。
-js-crawl
用于启用 JavaScript 文件解析和爬取在 JavaScript 文件中发现的端点的选项,默认禁用。
-crawl-duration
用于预定义爬取持续时间的选项,默认禁用。
-known-files
启用爬取
robots.txt 和 sitemap.xml 文件的选项,默认禁用。
-automatic-form-fill
启用自动填充表单字段的选项,支持已知/未知字段。已知字段的值可以通过更新配置文件
$HOME/.config/katana/form-config.yaml 来自定义。
自动填充表单是一个实验性功能。
认证爬取
认证爬取需要在 HTTP 请求中包含自定义 headers 或 cookies 来访问受保护的资源。这些 headers 提供认证或授权信息,使你能够爬取需要认证的内容/端点。你可以直接在命令行中指定 headers,也可以通过文件的方式提供给 katana 来执行认证爬取。注意: 用户需要手动执行认证并将会话 cookie/header 导出到文件中以供 katana 使用。
-headers
用于向请求添加自定义 header 或 cookie 的选项。
HTTP 规范中的 headers 语法以下是向请求添加 cookie 的示例:
连接到活动浏览器会话
Katana 还可以连接到用户已登录和认证的活动浏览器会话,并用于爬取。唯一的要求是启动浏览器时需要启用远程调试。 以下是启用远程调试启动 Chrome 浏览器并与 katana 一起使用的示例 - 步骤 1) 首先找到 Chrome 浏览器可执行文件的路径| Operating System | Chromium Executable Location | Google Chrome Executable Location |
|---|---|---|
| Windows (64-bit) | C:\Program Files (x86)\Google\Chromium\Application\chrome.exe | C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
| Windows (32-bit) | C:\Program Files\Google\Chromium\Application\chrome.exe | C:\Program Files\Google\Chrome\Application\chrome.exe |
| macOS | /Applications/Chromium.app/Contents/MacOS/Chromium | /Applications/Google Chrome.app/Contents/MacOS/Google Chrome |
| Linux | /usr/bin/chromium | /usr/bin/google-chrome |
现在登录到您想要爬取的网站并保持浏览器打开状态。步骤 3) 现在使用 websocket url 与 katana 连接到活动的浏览器会话并爬取网站
注意: 您可以使用-cdd选项指定自定义的 Chrome 数据目录来存储浏览器数据和 cookie,但如果 cookie 设置为仅Session或在一定时间后过期,则不会保存会话数据。
过滤器
-field
Katana 内置了一些字段,可用于过滤输出以获取所需信息,可以使用
-f 选项来指定任何可用的字段。
| FIELD | DESCRIPTION | EXAMPLE |
|---|---|---|
url | URL Endpoint | https://admin.projectdiscovery.io/admin/login?user=admin&password=admin |
qurl | URL including query param | https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin |
qpath | Path including query param | /login?user=admin&password=admin |
path | URL Path | https://admin.projectdiscovery.io/admin/login |
fqdn | Fully Qualified Domain name | admin.projectdiscovery.io |
rdn | Root Domain name | projectdiscovery.io |
rurl | Root URL | https://admin.projectdiscovery.io |
ufile | URL with File | https://admin.projectdiscovery.io/login.js |
file | Filename in URL | login.php |
key | Parameter keys in URL | user,password |
value | Parameter values in URL | admin,admin |
kv | Keys=Values in URL | user=admin&password=admin |
dir | URL Directory name | /admin/ |
udir | URL with Directory | https://admin.projectdiscovery.io/admin/ |
自定义字段
您可以使用正则表达式规则创建自定义字段来从页面响应中提取和存储特定信息。这些自定义字段使用 YAML 配置文件定义,默认从$HOME/.config/katana/field-config.yaml 位置加载。或者,您可以使用 -flc 选项从其他位置加载自定义字段配置文件。
以下是自定义字段的示例。
- name (必需)
name 属性的值用作 -field 命令行选项的值。
- type (必需)
自定义属性的类型,目前支持的选项 - regex
- part (可选)
从响应中提取信息的部分。默认值是response,包括响应头和响应体。其他可能的值是header和body。
- group (可选)
可以使用此属性选择正则表达式中的特定匹配组,例如: group: 1
使用自定义字段运行 katana:
-store-field
为了补充在运行时过滤输出的 field 选项,还有一个 -sf, -store-fields 选项,它的工作方式与 field 选项完全相同,只是它不进行过滤,而是将所有信息按目标 URL 排序存储在 katana_field 目录下的磁盘上。
-store-field 选项可用于收集信息以构建针对性的词表,其用途包括但不限于:
- 识别最常用的参数
- 发现经常使用的路径
- 查找常用文件
- 识别相关或未知的子域名
Katana 过滤器
-extension-match
可以使用
-em 选项轻松匹配特定扩展名,该选项可以确保只显示包含指定扩展名的输出。
-extension-filter
可以使用
-ef 选项轻松过滤特定扩展名,该选项可以确保移除所有包含指定扩展名的 URL。
-match-regex
-match-regex 或 -mr 标志允许使用正则表达式过滤输出的 URL。使用此标志时,只有与指定正则表达式匹配的 URL 才会在输出中显示。
-filter-regex
-filter-regex 或 -fr 标志允许使用正则表达式过滤输出的 URL。使用此标志时,将会跳过与指定正则表达式匹配的 URL。
高级过滤
Katana 支持基于 DSL 表达式的高级匹配和过滤功能:- 匹配状态码为 200 的端点:
- 匹配包含 “default” 且状态码不是 403 的端点:
- 匹配使用 PHP 技术的端点:
- 过滤掉运行在 Cloudflare 上的端点:
速率限制
如果不遵守目标网站的限制进行爬取,很容易被封禁/拉黑。Katana 提供了多个选项来调整爬取速度的快慢。-delay
用于在每个新请求之间引入延迟时间(以秒为单位)的选项,默认情况下禁用。
-concurrency
用于控制同时抓取每个目标的URL数量的选项。
-parallelism
用于定义从输入列表中同时处理目标的数量的选项。
-rate-limit
用于定义每秒最大请求数的选项。
-rate-limit-minute
用于定义每分钟最大请求数的选项。
输出
Katana 支持纯文本格式和 JSON 格式的文件输出。JSON 格式包含了额外的信息,如source、tag 和 attribute 名称,以关联发现的端点。
-output
默认情况下,katana 以纯文本格式输出爬取的端点。可以使用 -output 选项将结果写入文件。
-jsonl
-store-response
-store-response 选项允许将所有爬取的端点请求和响应写入文本文件。使用此选项时,包含请求和响应的文本文件将被写入 katana_response 目录。如果您想指定自定义目录,可以使用 -store-response-dir 选项。
-store-response 选项在 -headless 模式下不受支持。
以下是与输出相关的其他命令行选项 -
Katana 作为库使用
katana 可以作为库使用,方法是创建 Option 结构体的实例,并填充与通过命令行界面指定的相同选项。使用这些选项,您可以创建 crawlerOptions 以及标准或混合模式的 crawler。
应调用 crawler.Crawl 方法来爬取输入内容。