一个新一代的爬虫和蜘蛛框架
作者:Sec-Labs | 发布时间:

特征

- 快速且完全可配置的网络爬取
- 标准 和 无头 模式支持
- JavaScript 解析/爬取
- 可定制的 自动填表
- 范围控制 - 预配置字段/正则表达式
- 可定制的输出 - 预配置的字段
- 输入 - 标准 输入、 URL 和 列表
- 输出 - 标准输出 、 文件 和 JSON
安装
katana 需要 Go 1.18 才能成功安装。 要安装,只需运行以下命令或从发布页面 下载预编译的二进制文件 。
go install github.com/projectdiscovery/katana/cmd/katana@latest
安装/运行 katana 的更多选项-
Docker
将 docker 安装/更新到最新标签 -
docker pull projectdiscovery/katana:latest
使用 docker 在标准模式下运行 katana -
docker run projectdiscovery/katana:latest -u https://tesla.com
使用 docker 在无头模式下运行 katana -
docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
用法
katana -h
这将显示该工具的帮助。 这是它支持的所有开关。
Usage:
./katana [flags]
Flags:
INPUT:
-u, -list string[] target url / list to crawl
CONFIGURATION:
-d, -depth int maximum depth to crawl (default 2)
-jc, -js-crawl enable endpoint parsing / crawling in javascript file
-ct, -crawl-duration int maximum duration to crawl the target for
-kf, -known-files string enable crawling of known files (all,robotstxt,sitemapxml)
-mrs, -max-response-size int maximum response size to read (default 2097152)
-timeout int time to wait for request in seconds (default 10)
-aff, -automatic-form-fill enable optional automatic form filling (experimental)
-retry int number of times to retry the request (default 1)
-proxy string http/socks5 proxy to use
-H, -headers string[] custom header/cookie to include in request
-config string path to the katana configuration file
-fc, -form-config string path to custom form configuration file
HEADLESS:
-hl, -headless enable headless hybrid crawling (experimental)
-sc, -system-chrome use local installed chrome browser instead of katana installed
-sb, -show-browser show the browser on the screen with headless mode
-ho, -headless-options string[] start headless chrome with additional options
-nos, -no-sandbox start headless chrome in --no-sandbox mode
SCOPE:
-cs, -crawl-scope string[] in scope url regex to be followed by crawler
-cos, -crawl-out-scope string[] out of scope url regex to be excluded by crawler
-fs, -field-scope string pre-defined scope field (dn,rdn,fqdn) (default "rdn")
-ns, -no-scope disables host based default scope
-do, -display-out-scope display external endpoint from scoped crawling
FILTER:
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
-sf, -store-field string field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
-em, -extension-match string[] match output for given extension (eg, -em php,html,js)
-ef, -extension-filter string[] filter output for given extension (eg, -ef png,css)
RATE-LIMIT:
-c, -concurrency int number of concurrent fetchers to use (default 10)
-p, -parallelism int number of concurrent inputs to process (default 10)
-rd, -delay int request delay between each request in seconds
-rl, -rate-limit int maximum requests to send per second (default 150)
-rlm, -rate-limit-minute int maximum number of requests to send per minute
OUTPUT:
-o, -output string file to write output to
-j, -json write output in JSONL(ines) format
-nc, -no-color disable output content coloring (ANSI escape codes)
-silent display output only
-v, -verbose display verbose output
-version display project version
运行武士刀
武士刀的输入
katana 需要 url 或 端点 来抓取并接受单个或多个输入。
输入 URL 可以使用 -u 选项提供,并且可以使用逗号分隔的输入提供多个值,类似地, 使用选项支持 文件 -list 输入,另外还支持管道输入(stdin)。
网址输入
katana -u https://tesla.com
多个 URL 输入(逗号分隔)
katana -u https://tesla.com,https://google.com
列表输入
$ cat url_list.txt
https://tesla.com
https://google.com
katana -list url_list.txt
STDIN(管道)输入
echo https://tesla.com | katana
cat domains | httpx | katana
运行武士刀的示例 -
katana -u https://youtube.com
__ __
/ /_____ _/ /____ ____ ___ _
/ '_/ _ / __/ _ / _ \/ _ /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/ v0.0.1
projectdiscovery.io
[WRN] Use with caution. You are responsible for your actions.
[WRN] Developers assume no liability and are not responsible for any misuse or damage.
https://www.youtube.com/
https://www.youtube.com/about/
https://www.youtube.com/about/press/
https://www.youtube.com/about/copyright/
https://www.youtube.com/t/contact_us/
https://www.youtube.com/creators/
https://www.youtube.com/ads/
https://www.youtube.com/t/terms
https://www.youtube.com/t/privacy
https://www.youtube.com/about/policies/
https://www.youtube.com/howyoutubeworks?utm_campaign=ytgen&utm_source=ythp&utm_medium=LeftNav&utm_content=txt&u=https%3A%2F%2Fwww.youtube.com%2Fhowyoutubeworks%3Futm_source%3Dythp%26utm_medium%3DLeftNav%26utm_campaign%3Dytgen
https://www.youtube.com/new
https://m.youtube.com/
https://www.youtube.com/s/desktop/4965577f/jsbin/desktop_polymer.vflset/desktop_polymer.js
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-home-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/cssbin/www-onepick.css
https://www.youtube.com/s/_/ytmainappweb/_/ss/k=ytmainappweb.kevlar_base.0Zo5FUcPkCg.L.B1.O/am=gAE/d=0/rs=AGKMywG5nh5Qp-BGPbOaI1evhF5BVGRZGA
https://www.youtube.com/opensearch?locale=en_GB
https://www.youtube.com/manifest.webmanifest
https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-watch-page-skeleton.css
https://www.youtube.com/s/desktop/4965577f/jsbin/web-animations-next-lite.min.vflset/web-animations-next-lite.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/custom-elements-es5-adapter.vflset/custom-elements-es5-adapter.js
https://www.youtube.com/s/desktop/4965577f/jsbin/webcomponents-sd.vflset/webcomponents-sd.js
https://www.youtube.com/s/desktop/4965577f/jsbin/intersection-observer.min.vflset/intersection-observer.min.js
https://www.youtube.com/s/desktop/4965577f/jsbin/scheduler.vflset/scheduler.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-i18n-constants-en_GB.vflset/www-i18n-constants.js
https://www.youtube.com/s/desktop/4965577f/jsbin/www-tampering.vflset/www-tampering.js
https://www.youtube.com/s/desktop/4965577f/jsbin/spf.vflset/spf.js
https://www.youtube.com/s/desktop/4965577f/jsbin/network.vflset/network.js
https://www.youtube.com/howyoutubeworks/
https://www.youtube.com/trends/
https://www.youtube.com/jobs/
https://www.youtube.com/kids/
爬行模式
标准模式
标准爬取模式在底层使用标准的 go http 库来处理 HTTP 请求/响应。 这种方式要快得多,因为它没有浏览器开销。 尽管如此,它仍然按原样分析 HTTP 响应正文,没有任何 javascript 或 DOM 呈现,可能会丢失后 dom 呈现的端点或可能在复杂的 Web 应用程序中发生的异步端点调用,这取决于例如浏览器特定的事件。
无头模式
无头模式挂钩内部无头调用以直接在浏览器上下文中处理 HTTP 请求/响应。 这提供了两个优点:
- HTTP 指纹(TLS 和用户代理)将客户端完全识别为合法浏览器
- 更好的覆盖范围,因为端点是在分析标准原始响应时发现的,就像在以前的模式中一样,也是启用了 javascript 的浏览器渲染的模式。
无头爬行是可选的,可以使用 -headless 选项启用。
以下是其他无头 CLI 选项 -
katana -h headless
Flags:
HEADLESS:
-hl, -headless enable experimental headless hybrid crawling
-sc, -system-chrome use local installed chrome browser instead of katana installed
-sb, -show-browser show the browser on the screen with headless mode
-ho, -headless-options string[] start headless chrome with additional options
-nos, -no-sandbox start headless chrome in --no-sandbox mode
-no-sandbox
运行带有无沙盒 选项的无头 chrome 浏览器 ,在以 root 用户身份运行时很有用。
katana -u https://tesla.com -headless -no-sandbox
-headless-options
在无头模式下爬行时,可以使用 指定其他 chrome 选项 -headless-options ,例如 -
katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
范围控制
如果没有范围,爬网可能是无止境的,因为这样的 katana 提供了多种支持来定义爬网范围。
-field-scope
使用预定义字段名称定义范围的最方便选项, rdn 是字段范围的默认选项。
rdn- 抓取范围为根域名和所有子域(默认)fqdn- 爬行范围为给定的子(域)dn- 抓取范围为域名关键字
katana -u https://tesla.com -fs dn
-crawl-scope
对于高级范围控制, -cs 可以使用带有 正则表达式 支持的选项。
katana -u https://tesla.com -cs login
对于多个范围内的规则,可以传递带有多行字符串/正则表达式的文件输入。
$ cat in_scope.txt
login/
admin/
app/
wordpress/
katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scope
为了定义不抓取的内容, -cos 可以使用选项并且还支持 正则表达式 输入。
katana -u https://tesla.com -cos logout
对于多个超出范围的规则,可以传递带有多行字符串/正则表达式的文件输入。
$ cat out_of_scope.txt
/logout
/log_out
katana -u https://tesla.com -cos out_of_scope.txt
-no-scope
Katana 默认为 scope *.domain ,可以使用禁用此 -ns 选项并抓取互联网。
katana -u https://tesla.com -ns
-display-out-scope
默认情况下,当使用范围选项时,它也适用于作为输出显示的链接,因为这些 外部 URL 默认排除 并覆盖此行为, -do 选项可用于显示存在于目标范围 URL 中的所有外部 URL / 端点。
katana -u https://tesla.com -do
这是范围控制的所有 CLI 选项 -
katana -h scope
Flags:
SCOPE:
-cs, -crawl-scope string[] in scope url regex to be followed by crawler
-cos, -crawl-out-scope string[] out of scope url regex to be excluded by crawler
-fs, -field-scope string pre-defined scope field (dn,rdn,fqdn) (default "rdn")
-ns, -no-scope disables host based default scope
-do, -display-out-scope display external endpoint from scoped crawling
爬虫配置
Katana 带有多个选项,可以按照我们想要的方式配置和控制爬网。
-depth
用于定义 depth 跟随 url 进行爬取的选项,深度越深,被爬取的端点数量越多 + 爬取时间。
katana -u https://tesla.com -d 5
-js-crawl
启用 JavaScript 文件解析 + 抓取在 JavaScript 文件中发现的端点的选项,默认禁用。
katana -u https://tesla.com -jc
-crawl-duration
预定义抓取持续时间的选项,默认禁用。
katana -u https://tesla.com -ct 2
-known-files
启用爬网 robots.txt 和 sitemap.xml 文件的选项,默认禁用。
katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fill
为已知/未知字段启用自动填写表单的选项,可以根据需要通过更新表单配置文件来自定义已知字段值 $HOME/.config/katana/form-config.yaml 。
自动表格填写是实验性功能。
-aff, -automatic-form-fill enable optional automatic form filling (experimental)
需要时可以配置更多选项,这里是所有与配置相关的 CLI 选项 -
katana -h config
Flags:
CONFIGURATION:
-d, -depth int maximum depth to crawl (default 2)
-jc, -js-crawl enable endpoint parsing / crawling in javascript file
-ct, -crawl-duration int maximum duration to crawl the target for
-kf, -known-files string enable crawling of known files (all,robotstxt,sitemapxml)
-mrs, -max-response-size int maximum response size to read (default 2097152)
-timeout int time to wait for request in seconds (default 10)
-retry int number of times to retry the request (default 1)
-proxy string http/socks5 proxy to use
-H, -headers string[] custom header/cookie to include in request
-config string path to the katana configuration file
-fc, -form-config string path to custom form configuration file
过滤器
-field
Katana 带有内置字段,可用于过滤所需信息的输出, -f 选项可用于指定任何可用字段。
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
这是一个表格,其中包含每个字段的示例以及使用时的预期输出 -
| 场地 | 描述 | 例子 |
|---|---|---|
url |
网址端点 | https://admin.projectdiscovery.io/admin/login?user=admin&password=admin |
qurl |
包含查询参数的 URL | https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin |
qpath |
包含查询参数的路径 | /login?user=admin&password=admin |
path |
网址路径 | https://admin.projectdiscovery.io/admin/login |
fqdn |
完全限定域名 | admin.projectdiscovery.io |
rdn |
根域名 | projectdiscovery.io |
rurl |
根网址 | https://admin.projectdiscovery.io |
file |
URL 中的文件名 | login.php |
key |
URL 中的参数键 | user,password |
value |
URL 中的参数值 | admin,admin |
kv |
键=URL 中的值 | user=admin&password=admin |
dir |
URL 目录名称 | /admin/ |
udir |
带目录的 URL | https://admin.projectdiscovery.io/admin/ |
这是一个使用字段选项仅显示所有带有查询参数的 url 的示例 -
katana -u https://tesla.com -f qurl -silent
https://shop.tesla.com/en_au?redirect=no
https://shop.tesla.com/en_nz?redirect=no
https://shop.tesla.com/product/men_s-raven-lightweight-zip-up-bomber-jacket?sku=1740250-00-A
https://shop.tesla.com/product/tesla-shop-gift-card?sku=1767247-00-A
https://shop.tesla.com/product/men_s-chill-crew-neck-sweatshirt?sku=1740176-00-A
https://www.tesla.com/about?redirect=no
https://www.tesla.com/about/legal?redirect=no
https://www.tesla.com/findus/list?redirect=no
-store-field
为了补充 field 在运行时过滤输出有用的选项,有一个 -sf, -store-fields 选项与字段选项完全一样,除了过滤之外,它将所有信息存储在磁盘上 katana_output 按目标 url 排序的目录下。
katana -u https://tesla.com -sf key,fqdn,qurl -silent
$ ls katana_output/
https_www.tesla.com_fqdn.txt
https_www.tesla.com_key.txt
https_www.tesla.com_qurl.txt
|
注意 :
store-field选项可以方便地收集信息以构建目标感知单词列表,但不限于 -
- 最/常用 参数
- 最/常用的 路径
- 大多数/最常见的 文件
- 相关/未知 子(域) |
-extension-match
使用选项可以轻松地将抓取输出与特定扩展匹配, -em 以确保仅显示包含给定扩展的输出。
katana -u https://tesla.com -silent -em js,jsp,json
-extension-filter
可以使用选项轻松过滤爬网输出以获取特定扩展名,该 -ef 选项确保删除包含给定扩展名的所有 url。
katana -u https://tesla.com -silent -ef css,txt,md
以下是其他过滤器选项 -
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,file,key,value,kv,dir,udir)
-sf, -store-field string field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,file,key,value,kv,dir,udir)
-em, -extension-match string[] match output for given extension (eg, -em php,html,js)
-ef, -extension-filter string[] filter output for given extension (eg, -ef png,css)
速率限制和延迟
如果不遵循目标网站的限制,在抓取时很容易被阻止/禁止,katana 带有多个选项来调整抓取速度以达到我们想要的快/慢。
-delay
用于在 katana 在爬行时发出的每个新请求之间引入以秒为单位的延迟的选项,默认情况下禁用。
katana -u https://tesla.com -delay 20
-concurrency
控制每个目标同时获取的 url 数量的选项。
katana -u https://tesla.com -c 20
-parallelism
用于从列表输入定义同时处理的目标数量的选项。
katana -u https://tesla.com -p 20
-rate-limit
用于定义每秒最大请求数的选项。
katana -u https://tesla.com -rl 100
-rate-limit-minute
用于定义每分钟可以发出的最大请求数的选项。
katana -u https://tesla.com -rlm 500
这是用于速率限制控制的所有长/短 CLI 选项 -
katana -h rate-limit
Flags:
RATE-LIMIT:
-c, -concurrency int number of concurrent fetchers to use (default 10)
-p, -parallelism int number of concurrent inputs to process (default 10)
-rd, -delay int request delay between each request in seconds
-rl, -rate-limit int maximum requests to send per second (default 150)
-rlm, -rate-limit-minute int maximum number of requests to send per minute
输出
-json
Katana 既支持纯文本格式的文件输出,也支持 JSON 格式,其中包括附加信息,如 、 source 、 tag 和 attribute 名称,以共同关联已发现的端点。
katana -u https://example.com -json -do | jq .
{
"timestamp": "2022-11-05T22:33:27.745815+05:30",
"endpoint": "https://www.iana.org/domains/example",
"source": "https://example.com",
"tag": "a",
"attribute": "href"
}
以下是与输出相关的其他 CLI 选项 -
katana -h output
OUTPUT:
-o, -output string file to write output to
-j, -json write output in JSONL(ines) format
-nc, -no-color disable output content coloring (ANSI escape codes)
-silent display output only
-v, -verbose display verbose output
-version