要成功安装katana,需要Go 1.18。要安装,只需运行下面的命令或从发布页面下载预编译二进制文件。
xxxxxxxxxx
11go install github.com/projectdiscovery/katana/cmd/katana@latest
安装/运行katana的更多选项-
安装/更新docker到最新标签 -
xxxxxxxxxx
11docker pull projectdiscovery/katana:latest
使用docker以标准模式运行katana -
xxxxxxxxxx
11docker run projectdiscovery/katana:latest -u https://tesla.com
使用docker以无头模式运行katana -
xxxxxxxxxx
11docker run projectdiscovery/katana:latest -u https://tesla.com -system-chrome -headless
推荐安装以下先决条件 -
xxxxxxxxxx
81sudo apt update
2sudo snap refresh
3sudo apt install zip curl wget git
4sudo snap install golang --classic
5wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
6sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
7sudo apt update
8sudo apt install google-chrome-stable
安装katana -
xxxxxxxxxx
11go install github.com/projectdiscovery/katana/cmd/katana@latest
xxxxxxxxxx
11katana -h
这将显示工具的帮助信息。下面是它支持的所有开关。
xxxxxxxxxx
841Katana是一个快速的爬虫,专注于自动化执行的自动化流水线,提供无头和非无头爬行。
2
3用法:
4 ./katana [flags]
5
6标志:
7输入:
8 -u,-list string[] 要爬行的目标URL /列表
9
10配置:
11 -r,-resolvers string[] 自定义解析器列表(文件或逗号分隔)
12 -d,-depth int 爬行的最大深度(默认值3)
13 -jc,-js-crawl 启用JavaScript文件中的端点解析/爬行
14 -jsl,-jsluice 启用JavaScript文件中的jsluice解析(内存密集型)
15 -ct,-crawl-duration value 爬行目标的最长时间(s,m,h,d)(默认值s)
16 -kf,-known-files string 启用已知文件的爬行(all,robotstxt,sitemapxml)
17 -mrs,-max-response-size int 要读取的最大响应大小(默认值9223372036854775807)
18 -timeout int 请求等待时间(秒)(默认值10)
19 -aff,-automatic-form-fill 启用自动表单填充(实验性)
20 -fx,-form-extraction 在jsonl输出中提取表单、输入、文本区域和选择元素
21 -retry int 重试请求的次数(默认值1)
22 -proxy string 要使用的http/socks5代理
23 -H,-headers string[] 要在所有http请求的标头:值格式(文件)中包含的自定义标头/cookie
24 -config string katana配置文件的路径
25 -fc,-form-config string 自定义表单配置文件的路径
26 -flc,-field-config string 自定义字段配置文件的路径
27 -s,-strategy string 访问策略(深度优先,广度优先)(默认值"深度优先")
28 -iqp,-ignore-query-params 忽略具有不同查询参数值的相同路径的爬行
29 -tlsi,-tls-impersonate 启用实验性的客户端hello(ja3)tls随机化
30
31DEBUG:
32 -health-check, -hc 运行诊断检查
33 -elog, -error-log string 用于写入已发送请求的错误日志的文件
34
35无头:
36 -hl,-headless 启用无头混合爬行(实验性)
37 -sc,-system-chrome 使用本地安装的chrome浏览器而不是katana安装的chrome浏览器
38 -sb,-show-browser 在屏幕上显示浏览器的无头模式
39 -ho,-headless-options string[] 以附加选项启动无头chrome
40 -nos,-no-sandbox 以--no-sandbox模式启动无头chrome
41 -cdd,-chrome-data-dir string 存储chrome浏览器数据的路径
42 -scp,-system-chrome-path string 使用指定的chrome浏览器进行无头爬行
43 -noi,-no-incognito 以无痕模式启动无头chrome
44 -cwu,-chrome-ws-url string 使用其他地方启动的具有调试器侦听此URL的chrome浏览器实例
45 -xhr,-xhr-extraction 在jsonl输出中提取xhr请求的url和方法
46
47范围:
48 -cs,-crawl-scope string[] 要由爬行器跟随的范围url正则表达式
49 -cos,-crawl-out-scope string[] 要由爬行器排除的范围url正则表达式
50 -fs,-field-scope string 预定义的范围字段(dn,rdn,fqdn)(默认值"rdn")
51 -ns,-no-scope 禁用基于主机的默认范围
52 -do,-display-out-scope 显示范围爬行的外部端点
53
54过滤器:
55 -mr,-match-regex string[] 要在输出url(cli,文件)上匹配的正则表达式或正则表达式列表
56 -fr,-filter-regex string[] 要在输出url(cli,文件)上过滤的正则表达式或正则表达式列表
57 -f,-field string 要在输出中显示的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
58 -sf,-store-field string 要存储在每个主机输出中的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
59 -em,-extension-match string[] 匹配给定扩展名的输出(例如,-em php,html,js)
60 -ef,-extension-filter string[] 过滤给定扩展名的输出(例如,-ef png,css)
61 -mdc,-match-condition string 使用基于dsl的条件匹配响应
62 -fdc,-filter-condition string 使用基于dsl的条件过滤响应
63
64速率限制:
65 -c,-concurrency int 要使用的并发抓取器数量(默认值10)
66 -p,-parallelism int 要同时处理的输入数量(默认值10)
67 -rd,-delay int 每个请求之间的请求延迟时间(秒)
68 -rl,-rate-limit int 每秒发送的最大请求数(默认值150)
69 -rlm,-rate-limit-minute int 每分钟发送的最大请求数
70
71更新:
72 -up,-update 将katana更新到最新版本
73 -duc,-disable-update-check 禁用katana自动更新检查
74
75输出:
76 -o,-output string 要将输出写入的文件
77 -sr,-store-response 存储http请求/响应
78 -srd,-store-response-dir string 将http请求/响应存储到自定义目录
79 -j,-jsonl 以jsonl格式编写输出
80 -nc,-no-color 禁用输出内容着色(ANSI转义代码)
81 -silent 仅显示输出
82 -v,-verbose 显示详细输出
83 -debug 显示调试输出
84 -version 显示项目版本
katana需要url或endpoint来进行爬行,并接受单个或多个输入。
可以使用-u
选项提供输入URL,并使用逗号分隔的输入提供多个值,同样,还支持使用-list
选项提供文件输入,并且还支持管道输入(stdin)。
xxxxxxxxxx
11katana -u https://tesla.com
xxxxxxxxxx
11katana -u https://tesla.com,https://google.com
xxxxxxxxxx
41$ cat url_list.txt
2
3https://tesla.com
4https://google.com
xxxxxxxxxx
11katana -list url_list.txt
xxxxxxxxxx
11echo https://tesla.com | katana
xxxxxxxxxx
11cat domains | httpx | katana
运行katana的示例 -
xxxxxxxxxx
441katana -u https://youtube.com
2
3 __ __
4 / /_____ _/ /____ ____ ___ _
5 / '_/ _ / __/ _ / _ \/ _ /
6/_/\_\\_,_/\__/\_,_/_//_/\_,_/ v0.0.1
7
8 projectdiscovery.io
9
10[WRN] 谨慎使用。您对自己的行为负责。
11[WRN] 开发人员不承担任何责任,不对任何滥用或损坏负责。
12https://www.youtube.com/
13https://www.youtube.com/about/
14https://www.youtube.com/about/press/
15https://www.youtube.com/about/copyright/
16https://www.youtube.com/t/contact_us/
17https://www.youtube.com/creators/
18https://www.youtube.com/ads/
19https://www.youtube.com/t/terms
20https://www.youtube.com/t/privacy
21https://www.youtube.com/about/policies/
22https://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
23https://www.youtube.com/new
24https://m.youtube.com/
25https://www.youtube.com/s/desktop/4965577f/jsbin/desktop_polymer.vflset/desktop_polymer.js
26https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-home-page-skeleton.css
27https://www.youtube.com/s/desktop/4965577f/cssbin/www-onepick.css
28https://www.youtube.com/s/_/ytmainappweb/_/ss/k=ytmainappweb.kevlar_base.0Zo5FUcPkCg.L.B1.O/am=gAE/d=0/rs=AGKMywG5nh5Qp-BGPbOaI1evhF5BVGRZGA
29https://www.youtube.com/opensearch?locale=en_GB
30https://www.youtube.com/manifest.webmanifest
31https://www.youtube.com/s/desktop/4965577f/cssbin/www-main-desktop-watch-page-skeleton.css
32https://www.youtube.com/s/desktop/4965577f/jsbin/web-animations-next-lite.min.vflset/web-animations-next-lite.min.js
33https://www.youtube.com/s/desktop/4965577f/jsbin/custom-elements-es5-adapter.vflset/custom-elements-es5-adapter.js
34https://www.youtube.com/s/desktop/4965577f/jsbin/webcomponents-sd.vflset/webcomponents-sd.js
35https://www.youtube.com/s/desktop/4965577f/jsbin/intersection-observer.min.vflset/intersection-observer.min.js
36https://www.youtube.com/s/desktop/4965577f/jsbin/scheduler.vflset/scheduler.js
37https://www.youtube.com/s/desktop/4965577f/jsbin/www-i18n-constants-en_GB.vflset/www-i18n-constants.js
38https://www.youtube.com/s/desktop/4965577f/jsbin/www-tampering.vflset/www-tampering.js
39https://www.youtube.com/s/desktop/4965577f/jsbin/spf.vflset/spf.js
40https://www.youtube.com/s/desktop/4965577f/jsbin/network.vflset/network.js
41https://www.youtube.com/howyoutubeworks/
42https://www.youtube.com/trends/
43https://www.youtube.com/jobs/
44https://www.youtube.com/kids/
标准爬行模式使用标准的go http库来处理HTTP请求/响应。该模式速度更快,因为它没有浏览器开销。但是,它以原始响应体的形式分析HTTP响应,而不考虑任何JavaScript或DOM渲染,这可能会导致错过后DOM渲染的端点或异步端点调用,这可能发生在复杂的Web应用程序中,这些应用程序依赖于特定于浏览器的事件。
无头模式将内部无头调用挂钩到浏览器上下文中,以处理HTTP请求/响应。这样做有两个优点:
HTTP指纹(TLS和用户代理)完全将客户端标识为合法的浏览器
更好的覆盖范围,因为端点是通过分析标准的原始响应以及启用JavaScript的浏览器渲染的端点发现的。
无头爬行是可选的,可以使用-headless
选项启用。
以下是其他无头CLI选项 -
xxxxxxxxxx
141katana -h headless
2
3Flags:
4HEADLESS:
5 -hl, -headless 启用无头混合爬行(实验性)
6 -sc, -system-chrome 使用本地安装的chrome浏览器而不是katana安装的chrome浏览器
7 -sb, -show-browser 在屏幕上显示浏览器的无头模式
8 -ho, -headless-options string[] 以附加选项启动无头chrome
9 -nos, -no-sandbox 以--no-sandbox模式启动无头chrome
10 -cdd, -chrome-data-dir string 存储chrome浏览器数据的路径
11 -scp, -system-chrome-path string 使用指定的chrome浏览器进行无头爬行
12 -noi, -no-incognito 以无痕模式启动无头chrome
13 -cwu, -chrome-ws-url string 使用其他地方启动的具有调试器侦听此URL的chrome浏览器实例
14 -xhr, -xhr-extraction 在jsonl输出中提取xhr请求的url和方法
-no-sandbox
以无沙箱模式运行无头chrome浏览器,当以root用户身份运行时非常有用。
xxxxxxxxxx
11katana -u https://tesla.com -headless -no-sandbox
-no-incognito
以无痕模式启动无头chrome浏览器,当使用本地浏览器时非常有用。
xxxxxxxxxx
11katana -u https://tesla.com -headless -no-incognito
-headless-options
在无头模式下爬行时,可以使用-headless-options
指定附加的chrome选项,例如 -
xxxxxxxxxx
11katana -u https://tesla.com -headless -system-chrome -headless-options --disable-gpu,proxy-server=http://127.0.0.1:8080
如果不进行范围控制,很容易被封锁/禁止,katana提供了多种选项来调整爬行速度。
-field-scope
最方便的定义范围的选项是使用预定义字段名的-fs
选项,其中rdn
是字段范围的默认选项。
rdn
- 限定为根域名和所有子域名的爬行(例如*example.com
)(默认值)
fqdn
- 限定为给定的子(域)(例如www.example.com
或api.example.com
)的爬行
dn
- 限定为域名关键字(例如example
)的爬行
xxxxxxxxxx
11katana -u https://tesla.com -fs dn
-crawl-scope
对于高级范围控制,可以使用-cs
选项,该选项支持正则表达式输入。
xxxxxxxxxx
11katana -u https://tesla.com -cs login
对于多个范围规则,可以使用多行字符串/正则表达式的文件输入。
xxxxxxxxxx
61$ cat in_scope.txt
2
3login/
4admin/
5app/
6wordpress/
xxxxxxxxxx
11katana -u https://tesla.com -cs in_scope.txt
-crawl-out-scope
用于定义不要爬行的范围的-cos
选项也支持正则表达式输入。
xxxxxxxxxx
21katana -u https://tesla.com -coslogout
2/log_out
xxxxxxxxxx
11katana -u https://tesla.com -cos out_of_scope.txt
-no-scope
Katana默认为范围*.domain
,要禁用此功能,可以使用-ns
选项,也可以爬行互联网。
xxxxxxxxxx
11katana -u https://tesla.com -ns
-display-out-scope
默认情况下,当使用范围选项时,它也适用于要显示的链接,因此外部URL默认排除,要覆盖此行为,可以使用-do
选项来显示在目标范围URL / Endpoint 中存在的所有外部URL。
xxxxxxxxxx
11katana -u https://tesla.com -do
以下是与范围控制相关的所有CLI选项 -
xxxxxxxxxx
91katana -h scope
2
3Flags:
4SCOPE:
5 -cs, -crawl-scope string[] 要由爬行器跟随的范围url正则表达式
6 -cos, -crawl-out-scope string[] 要由爬行器排除的范围url正则表达式
7 -fs, -field-scope string 预定义的范围字段(dn,rdn,fqdn)(默认值"rdn")
8 -ns, -no-scope 禁用基于主机的默认范围
9 -do, -display-out-scope 显示范围爬行的外部端点
Katana提供了多种选项来配置和控制爬行,以满足我们的需求。
-depth
定义爬行的最大深度的选项,深度越大,爬行的端点数量越多+爬行的时间越长。
xxxxxxxxxx
11katana -u https://tesla.com -d 5
-js-crawl
启用JavaScript文件解析+爬行在JavaScript文件中发现的端点,默认情况下禁用。
xxxxxxxxxx
11katana -u https://tesla.com -jc
-crawl-duration
预定义爬行持续时间的选项,默认禁用。
xxxxxxxxxx
11katana -u https://tesla.com -ct 2
-known-files
启用爬行robots.txt
和sitemap.xml
文件的选项,默认禁用。
xxxxxxxxxx
11katana -u https://tesla.com -kf robotstxt,sitemapxml
-automatic-form-fill
启用已知/未知字段的自动表单填充的选项,已知字段值可以根据需要进行自定义,通过更新位于$HOME/.config/katana/form-config.yaml
的表单配置文件。
自动表单填充是实验性功能。
xxxxxxxxxx
11katana -u https://tesla.com -aff
身份验证爬行涉及在HTTP请求中包含自定义标头或cookie以访问受保护的资源。这些标头提供身份验证或授权信息,允许您爬行经过身份验证的内容/端点。您可以直接在命令行中指定标头,也可以将它们作为文件提供给katana以执行身份验证爬行。
注意:用户需要手动执行身份验证并将会话cookie/标头导出到文件,以便与katana一起使用。
-headers
在请求中添加自定义标头或cookie的选项。
标头在HTTP规范中的语法
以下是将cookie添加到请求中的示例:
xxxxxxxxxx
11katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
也可以将标头或cookie作为文件提供。例如:
xxxxxxxxxx
51$ cat cookie.txt
2
3Cookie: PHPSESSIONID=XXXXXXXXX
4X-API-KEY: XXXXX
5TOKEN=XX
xxxxxxxxxx
11katana -u https://tesla.com -H cookie.txt
在需要时,可以进行更多配置,以下是所有与配置相关的CLI选项 -
xxxxxxxxxx
201katana -h config
2
3Flags:
4CONFIGURATION:
5 -r, -resolvers string[] 自定义解析器列表(文件或逗号分隔)
6 -d, -depth int 爬行的最大深度(默认值3)
7 -jc, -js-crawl 启用JavaScript文件中的端点解析/爬行
8 -ct, -crawl-duration int 爬行目标的最长时间
9 -kf, -known-files string 启用已知文件的爬行(all,robotstxt,sitemapxml)
10 -mrs, -max-response-size int 要读取的最大响应大小(默认值9223372036854775807)
11 -timeout int 请求等待时间(秒)(默认值10)
12 -aff, -automatic-form-fill 启用自动表单填充(实验性)
13 -fx, -form-extraction 启用提取表单、输入、文本区域和选择元素
14 -retry int 重试请求的次数(默认值1)
15 -proxy string 要使用的http/socks5代理
16 -H, -headers string[] 要在请求中包含的自定义标头/cookie
17 -config string katana配置文件的路径
18 -fc, -form-config string 自定义表单配置文件的路径
19 -flc, -field-config string 自定义字段配置文件的路径
20 -s, -strategy string 访问策略(深度优先,广度优先)(默认值"深度优先")
Katana还可以连接到用户已登录和经过身份验证的活动浏览器会话。唯一的要求是启动具有远程调试功能的浏览器。
以下是启动启用了远程调试功能的chrome浏览器的示例,并使用它连接到katana的活动浏览器会话进行爬行 -
步骤1)首先找到chrome可执行文件的路径
操作系统 | Chromium可执行文件位置 | Google Chrome可执行文件位置 |
---|---|---|
Windows(64位) | C:\Program Files (x86)\Google\Chromium\Application\chrome.exe | C:\Program Files (x86)\Google\Chrome\Application\chrome.exe |
Windows(32位) | 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 |
步骤2)启动启用了远程调试功能的chrome浏览器,并返回websocker URL。例如,在MacOS上,您可以使用以下命令启动启用了远程调试功能的chrome浏览器 -
xxxxxxxxxx
41$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
2
3
4DevTools listening on ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6
现在登录到要爬行的网站,并保持浏览器打开。
步骤3)现在使用websocket URL与katana连接到活动浏览器会话并爬行网站
xxxxxxxxxx
11katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito
注意:您可以使用
-cdd
选项指定自定义chrome数据目录以存储浏览器数据和cookie,但是如果cookie设置为Session
或在一定时间后过期,则不保存会话数据。
-field
Katana提供了内置字段,可以用于根据所需的信息过滤输出,-f
选项可用于指定任何可用字段。
xxxxxxxxxx
11-f, -field string 要在输出中显示的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
以下是仅显示具有查询参数的所有URL的示例 -
xxxxxxxxxx
71katana -u https://tesla.com -f qurl -silent
2
3https://shop.tesla.com/en_au?redirect=no
4https://shop.tesla.com/en_nz?redirect=no
5https://shop.tesla.com/product/men_s-raven-lightweight-zip-up-bomber-jacket?sku=1740250-00-A
6https://shop.tesla.com/product/tesla-shop-gift-card?sku=1767247-00-A
7https://shop.tesla.com/product/men_s-chill-crew-neck-s
您可以使用正则表达式规则创建自定义字段,以从页面响应中提取和存储特定信息。这些自定义字段使用YAML配置文件进行定义,并从默认位置`$HOME/.config/katana/field。 以下是一个示例自定义字段。
xxxxxxxxxx
101name email
2 type regex
3 regex
4'([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'
5'([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)'
6
7name phone
8 type regex
9 regex
10'\d{3}-\d{8}|\d{4}-\d{7}'
在定义自定义字段时,支持以下属性:
name(必填)
name属性的值将用作
-field
命令行选项的值。
type(必填)
自定义属性的类型,目前支持的选项为
regex
part(可选)
从响应中提取信息的部分。默认值为
response
,包括标题和正文。其他可能的值为header
和body
。
group(可选)
您可以使用此属性选择正则表达式中的特定匹配组,例如:
group: 1
xxxxxxxxxx
11katana -u https://tesla.com -f email,phone
-store-field
为了补充field
选项,该选项在运行时有助于过滤输出,还有-sf,-store-fields
选项,其工作方式与field
选项完全相同,只是不是过滤输出,而是将所有信息存储在磁盘上,存储在katana_field
目录下,按目标URL排序。
xxxxxxxxxx
11katana -u https://tesla.com -sf key,fqdn,qurl -silent
xxxxxxxxxx
51$ ls katana_field/
2
3https_www.tesla.com_fqdn.txt
4https_www.tesla.com_key.txt
5https_www.tesla.com_qurl.txt
-store-field
选项可用于收集信息以构建用于各种目的的有针对性的字词表,包括但不限于:
识别最常用的参数
发现经常使用的路径
查找常用文件
识别相关或未知的子域
-extension-match
可以使用-em
选项轻松匹配特定扩展名的爬行输出,以确保仅显示包含给定扩展名的输出。
xxxxxxxxxx
11katana -u https://tesla.com -silent -em js,jsp,json
-extension-filter
可以使用-ef
选项轻松过滤特定扩展名的爬行输出,以确保删除所有包含给定扩展名的URL。
xxxxxxxxxx
11katana -u https://tesla.com -silent -ef css,txt,md
-match-regex
-match-regex
或-mr
标志允许您使用正则表达式过滤输出URL。使用此标志时,只有与指定的正则表达式匹配的URL将在输出中打印。
xxxxxxxxxx
11katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
-filter-regex
-filter-regex
或-fr
标志允许您使用正则表达式过滤输出URL。使用此标志时,将跳过与指定的正则表达式匹配的URL。
xxxxxxxxxx
11katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silent
Katana支持基于DSL表达式的高级匹配和过滤功能:
要匹配状态码为200的端点:
xxxxxxxxxx
11katana -u https://www.hackerone.com -mdc 'status_code == 200'
要匹配包含"default"并且状态码不是403的端点:
xxxxxxxxxx
11katana -u https://www.hackerone.com -mdc 'contains(endpoint, "default") && status_code != 403'
要匹配使用PHP技术的端点:
xxxxxxxxxx
11katana -u https://www.hackerone.com -mdc 'contains(to_lower(technologies), "php")'
要过滤在Cloudflare上运行的端点:
xxxxxxxxxx
11katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'
DSL函数可以应用于jsonl输出中的任何键。有关可用的DSL函数的更多信息,请访问dsl项目。
以下是其他过滤选项 -
xxxxxxxxxx
121katana -h filter
2
3Flags:
4FILTER:
5 -mr, -match-regex string[] 用于匹配输出URL的正则表达式或正则表达式列表(cli,file)
6 -fr, -filter-regex string[] 用于过滤输出URL的正则表达式或正则表达式列表(cli,file)
7 -f, -field string 要在输出中显示的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
8 -sf, -store-field string 要在每个主机输出中存储的字段(url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
9 -em, -extension-match string[] 匹配给定扩展名的输出(例如,-em php,html,js)
10 -ef, -extension-filter string[] 过滤给定扩展名的输出(例如,-ef png,css)
11 -mdc, -match-condition string 使用基于dsl的条件匹配响应
12 -fdc, -filter-condition string 使用基于dsl的条件过滤响应
如果不遵循目标网站的限制,很容易在爬行时被阻止/禁止,katana提供了多个选项来调整爬行速度。
-delay
在爬行时,可以使用-delay
选项在每个新请求之间引入延迟(以秒为单位),默认情况下禁用。
xxxxxxxxxx
11katana -u https://tesla.com -delay 20
-concurrency
控制同时获取每个目标的URL数的选项。
xxxxxxxxxx
11katana -u https://tesla.com -c 20
-parallelism
定义同时从列表输入处理的目标数的选项。
xxxxxxxxxx
11katana -u https://tesla.com -p 20
-rate-limit
用于定义每秒可以发送的最大请求数的选项。
xxxxxxxxxx
11katana -u https://tesla.com -rl 100
-rate-limit-minute
用于定义每分钟可以发送的最大请求数的选项。
xxxxxxxxxx
11katana -u https://tesla.com -rlm 500
以下是速率限制控制的所有长/短CLI选项 -
xxxxxxxxxx
91katana -h rate-limit
2
3Flags:
4RATE-LIMIT:
5 -c, -concurrency int 要使用的并发抓取器数(默认值为10)
6 -p, -parallelism int 要同时处理的输入数(默认值为10)
7 -rd, -delay int 请求之间的请求延迟(以秒为单位)
8 -rl, -rate-limit int 每秒发送的最大请求数(默认值为150)
9 -rlm, -rate-limit-minute int 每分钟发送的最大请求数
Katana支持以纯文本格式和包含其他信息(如source
,tag
和attribute
名称)的JSON格式的文件输出,以关联发现的端点。
-output
默认情况下,katana以纯文本格式输出爬行的端点。可以使用-output
选项将结果写入文件。
xxxxxxxxxx
11katana -u https://example.com -no-scope -output example_endpoints.txt
-jsonl
xxxxxxxxxx
11katana -u https://example.com -jsonl | jq .
xxxxxxxxxx
331{
2 "timestamp": "2023-03-20T16:23:58.027559+05:30",
3 "request": {
4 "method": "GET",
5 "endpoint": "https://example.com",
6 "raw": "GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept-Encoding: gzip\r\n\r\n"
7 },
8 "response": {
9 "status_code": 200,
10 "headers": {
11 "accept_ranges": "bytes",
12 "expires": "Mon, 27 Mar 2023 10:53:58 GMT",
13 "last_modified": "Thu, 17 Oct 2019 07:18:26 GMT",
14 "content_type": "text/html; charset=UTF-8",
15 "server": "ECS (dcb/7EA3)",
16 "vary": "Accept-Encoding",
17 "etag": "\"3147526947\"",
18 "cache_control": "max-age=604800",
19 "x_cache": "HIT",
20 "date": "Mon, 20 Mar 2023 10:53:58 GMT",
21 "age": "331239"
22 },
23 "body": "<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n",
24 "technologies": [
25 "Azure",
26 "Amazon ECS",
27 "Amazon Web Services",
28 "Docker",
29 "Azure CDN"
30 ],
31 "raw": "HTTP/1.1 200 OK\r\nContent-Length: 1256\r\nAccept-Ranges: bytes\r\nAge: 331239\r\nCache-Control: max-age=604800\r\nContent-Type: text/html; charset=UTF-8\r\nDate: Mon, 20 Mar 2023 10:53:58 GMT\r\nEtag: \"3147526947\"\r\nExpires: Mon, 27 Mar 2023 10:53:58 GMT\r\nLast-Modified: Thu, 17 Oct 2019 07:18:26 GMT\r\nServer: ECS (dcb/7EA3)\r\nVary: Accept-Encoding\r\nX-Cache: HIT\r\n\r\n<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.</p>\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n"
32 }
33}
-store-response
-store-response
选项允许将所有爬行的端点请求和响应写入文本文件。使用此选项时,将会将包含请求和响应的文本文件写入katana_response目录。如果要指定自定义目录,可以使用-store-response-dir
选项。
xxxxxxxxxx
11katana -u https://example.com -no-scope -store-response
xxxxxxxxxx
41$ cat katana_response/index.txt
2
3katana_response/example.com/327c3fda87ce286848a574982ddd0b7c7487f816.txt https://example.com (200 OK)
4katana_response/www.iana.org/bfc096e6dd93b993ca8918bf4c08fdc707a70723.txt http://www.iana.org/domains/reserved (200 OK)
注意:
-store-response
选项不支持-headless
模式。
以下是与输出相关的其他CLI选项 -
xxxxxxxxxx
111katana -h output
2
3OUTPUT:
4 -o, -output string 要将输出写入的文件
5 -sr, -store-response 存储http请求/响应
6 -srd, -store-response-dir string 将http请求/响应存储到自定义目录
7 -j, -json 以JSONL(ines)格式写入输出
8 -nc, -no-color 禁用输出内容着色(ANSI转义代码)
9 -silent 仅显示输出
10 -v, -verbose 显示详细输出
11 -version 显示项目版本
可以通过创建Option
结构的实例并使用与通过CLI指定的相同选项填充它来将katana
用作库。使用选项可以创建crawlerOptions
,从而创建标准或混合crawler
。
应调用crawler.Crawl
方法来爬行输入。
x
1package main
2
3import (
4 "github.com/projectdiscovery/gologger"
5 "github.com/projectdiscovery/katana/pkg/engine/standard"
6 "github.com/projectdiscovery/katana/pkg/output"
7 "github.com/projectdiscovery/katana/pkg/types"
8)
9
10func main() {
11 options := &types.Options{
12 MaxDepth: 1, // 爬行的最大深度
13 FieldScope: "rdn", // 爬行范围字段
14 BodyReadSize: 2 * 1024 * 1024, // 读取的最大响应大小
15 RateLimit: 150, // 每秒发送的最大请求数
16 Strategy: "depth-first", // 访问策略(depth-first,breadth-first)
17 OnResult: func(result output.Result) { // 用于结果的回调函数
18 gologger.Info().Msg(result.Request.URL)
19 },
20 }
21 crawlerOptions, err := types.NewCrawlerOptions(options)
22 if err != nil {
23 gologger.Fatal().Msg(err.Error())
24 }
25 defer