功能 • 安装 • 使用 • 范围 • 配置 • 过滤器 • 加入 Discord
katana 需要Go 1.18才能成功安装。要安装,只需运行以下命令或从发布页面下载预编译的二进制文件。
CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest
安装/运行 katana 的更多选项-
安装/更新 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
建议安装以下先决条件 -
sudo apt update
sudo snap refresh
sudo apt install zip curl wget git
sudo snap install golang --classic
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c ' echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list '
sudo apt update
sudo apt install google-chrome-stable
安装武士刀 -
go install github.com/projectdiscovery/katana/cmd/katana@latest
katana -h
这将显示该工具的帮助。这是它支持的所有交换机。
Katana is a fast crawler focused on execution in automation
pipelines offering both headless and non-headless crawling.
Usage:
./katana [flags]
Flags:
INPUT:
-u, -list string[] target url / list to crawl
-resume string resume scan using resume.cfg
-e, -exclude string[] exclude host matching specified filter ('cdn', 'private-ips', cidr, ip, regex)
CONFIGURATION:
-r, -resolvers string[] list of custom resolver (file or comma separated)
-d, -depth int maximum depth to crawl (default 3)
-jc, -js-crawl enable endpoint parsing / crawling in javascript file
-jsl, -jsluice enable jsluice parsing in javascript file (memory intensive)
-ct, -crawl-duration value maximum duration to crawl the target for (s, m, h, d) (default s)
-kf, -known-files string enable crawling of known files (all,robotstxt,sitemapxml), a minimum depth of 3 is required to ensure all known files are properly crawled.
-mrs, -max-response-size int maximum response size to read (default 9223372036854775807)
-timeout int time to wait for request in seconds (default 10)
-aff, -automatic-form-fill enable automatic form filling (experimental)
-fx, -form-extraction extract form, input, textarea & select elements in jsonl output
-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 all http request in header:value format (file)
-config string path to the katana configuration file
-fc, -form-config string path to custom form configuration file
-flc, -field-config string path to custom field configuration file
-s, -strategy string Visit strategy (depth-first, breadth-first) (default "depth-first")
-iqp, -ignore-query-params Ignore crawling same path with different query-param values
-tlsi, -tls-impersonate enable experimental client hello (ja3) tls randomization
-dr, -disable-redirects disable following redirects (default false)
DEBUG:
-health-check, -hc run diagnostic check up
-elog, -error-log string file to write sent requests error log
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
-cdd, -chrome-data-dir string path to store chrome browser data
-scp, -system-chrome-path string use specified chrome browser for headless crawling
-noi, -no-incognito start headless chrome without incognito mode
-cwu, -chrome-ws-url string use chrome browser instance launched elsewhere with the debugger listening at this URL
-xhr, -xhr-extraction extract xhr request url,method in jsonl output
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) or custom regex (e.g., '(company-staging.io|company.com)') (default "rdn")
-ns, -no-scope disables host based default scope
-do, -display-out-scope display external endpoint from scoped crawling
FILTER:
-mr, -match-regex string[] regex or list of regex to match on output url (cli, file)
-fr, -filter-regex string[] regex or list of regex to filter on output url (cli, file)
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,key,value,kv,dir,udir)
-sf, -store-field string field to store in per-host output (url,path,fqdn,rdn,rurl,qurl,qpath,file,ufile,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)
-mdc, -match-condition string match response with dsl based condition
-fdc, -filter-condition string filter response with dsl based condition
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
UPDATE:
-up, -update update katana to latest version
-duc, -disable-update-check disable automatic katana update check
OUTPUT:
-o, -output string file to write output to
-sr, -store-response store http requests/responses
-srd, -store-response-dir string store http requests/responses to custom directory
-sfd, -store-field-dir string store per-host field to custom directory
-or, -omit-raw omit raw requests/responses from jsonl output
-ob, -omit-body omit response body from jsonl output
-j, -jsonl write output in jsonl format
-nc, -no-color disable output content coloring (ANSI escape codes)
-silent display output only
-v, -verbose display verbose output
-debug display debug output
-version display project version
katana需要url或端点来爬行并接受单个或多个输入。
可以使用-u
选项提供输入 URL,并且可以使用逗号分隔的输入提供多个值,类似地,使用-list
选项支持文件输入,此外还支持管道输入(stdin)。
katana -u https://tesla.com
katana -u https://tesla.com,https://google.com
$ cat url_list.txt
https://tesla.com
https://google.com
katana -list url_list.txt
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 请求/响应。这有两个优点:
无头爬行是可选的,可以使用-headless
选项启用。
以下是其他无头 CLI 选项 -
katana -h headless
Flags:
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
-cdd, -chrome-data-dir string path to store chrome browser data
-scp, -system-chrome-path string use specified chrome browser for headless crawling
-noi, -no-incognito start headless chrome without incognito mode
-cwu, -chrome-ws-url string use chrome browser instance launched elsewhere with the debugger listening at this URL
-xhr, -xhr-extraction extract xhr requests
-no-sandbox
使用无沙箱选项运行无头 Chrome 浏览器,在以 root 用户身份运行时很有用。
katana -u https://tesla.com -headless -no-sandbox
-no-incognito
运行无头 Chrome 浏览器,无需隐身模式,在使用本地浏览器时很有用。
katana -u https://tesla.com -headless -no-incognito
-headless-options
在无头模式下爬行时,可以使用-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
- 爬行范围为根域名和所有子域(例如*example.com
)(默认)fqdn
- 爬行范围为给定子(域)(例如www.example.com
或api.example.com
)dn
- 爬行范围为域名关键字(例如example
) 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 默认范围为*.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
选项定义跟随 url 进行爬行的depth
,深度越深,爬行的端点数量 + 爬行时间越多。
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
处的表单配置文件根据需要自定义已知字段值。
自动表格填写是实验性功能。
katana -u https://tesla.com -aff
经过身份验证的爬网涉及在 HTTP 请求中包含自定义标头或 cookie 以访问受保护的资源。这些标头提供身份验证或授权信息,允许您抓取经过身份验证的内容/端点。您可以直接在命令行中指定标头,或者将它们作为带有 katana 的文件提供以执行经过身份验证的爬网。
注意:用户需要手动执行身份验证并将会话 cookie/标头导出到文件以与 katana 一起使用。
-headers
向请求添加自定义标头或 cookie 的选项。
HTTP 规范中标头的语法
以下是向请求添加 cookie 的示例:
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
还可以将标头或 cookie 作为文件提供。例如:
$ cat cookie.txt
Cookie: PHPSESSIONID=XXXXXXXXX
X-API-KEY: XXXXX
TOKEN=XX
katana -u https://tesla.com -H cookie.txt
需要时还有更多选项可以配置,这里是所有与配置相关的 CLI 选项 -
katana -h config
Flags:
CONFIGURATION:
-r, -resolvers string[] list of custom resolver (file or comma separated)
-d, -depth int maximum depth to crawl (default 3)
-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 9223372036854775807)
-timeout int time to wait for request in seconds (default 10)
-aff, -automatic-form-fill enable automatic form filling (experimental)
-fx, -form-extraction enable extraction of form, input, textarea & select elements
-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
-flc, -field-config string path to custom field configuration file
-s, -strategy string Visit strategy (depth-first, breadth-first) (default "depth-first")
Katana 还可以连接到用户已登录并经过身份验证的活动浏览器会话。并用它来爬行。唯一的要求是启动浏览器并启用远程调试。
下面是启动 chrome 浏览器并启用远程调试并将其与 katana 一起使用的示例 -
步骤1)首先找到chrome可执行文件的路径
操作系统 | Chromium 可执行位置 | Google Chrome 可执行文件位置 |
---|---|---|
Windows(64 位) | C:Program Files (x86)GoogleChromiumApplicationchrome.exe | C:Program Files (x86)GoogleChromeApplicationchrome.exe |
Windows(32 位) | C:Program FilesGoogleChromiumApplicationchrome.exe | C:Program FilesGoogleChromeApplicationchrome.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 -
$ /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --remote-debugging-port=9222
DevTools listening on ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6
现在登录您要抓取的网站并保持浏览器打开。
步骤 3) 现在使用带有 katana 的 websocket url 连接到活动浏览器会话并抓取网站
katana -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
选项可用于指定任何可用字段。
-f, -field string field to display in output (url,path,fqdn,rdn,rurl,qurl,qpath,file,key,value,kv,dir,udir)
这是一个表格,其中包含每个字段的示例以及使用时的预期输出 -
场地 | 描述 | 例子 |
---|---|---|
url | 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 |
ufile | 带文件的 URL | https://admin.projectdiscovery.io/login.js |
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/ |
以下是使用 field 选项仅显示所有带有查询参数的 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
您可以创建自定义字段,以使用正则表达式规则从页面响应中提取和存储特定信息。这些自定义字段是使用 YAML 配置文件定义的,并从$HOME/.config/katana/field-config.yaml
的默认位置加载。或者,您可以使用-flc
选项从不同位置加载自定义字段配置文件。这是自定义字段的示例。
- name : email
type : regex
regex :
- ' ([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-Z0-9_-]+) '
- ' ([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+.[a-zA-Z0-9_-]+) '
- name : phone
type : regex
regex :
- ' d{3}-d{8}|d{4}-d{7} '
定义自定义字段时,支持以下属性:
name属性的值用作
-field
cli 选项值。
自定义属性的类型,目前支持的选项 -
regex
从中提取信息的响应部分。默认值为
response
,其中包括标头和正文。其他可能的值是header
和body
。
您可以使用此属性在正则表达式中选择特定的匹配组,例如:
group: 1
katana -u https://tesla.com -f email,phone
-store-field
为了补充对运行时过滤输出有用的field
选项,有-sf, -store-fields
选项,其工作方式与字段选项完全相同,只是它不是过滤,而是将磁盘上的所有信息存储在按目标 url 排序的katana_field
目录下。使用-sfd
或-store-field-dir
将数据存储在不同位置。
katana -u https://tesla.com -sf key,fqdn,qurl -silent
$ ls katana_field/
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
-match-regex
-match-regex
或-mr
标志允许您使用正则表达式过滤输出 URL。使用此标志时,只有与指定正则表达式匹配的 URL 才会打印在输出中。
katana -u https://tesla.com -mr 'https://shop.tesla.com/*' -silent
-filter-regex
-filter-regex
或-fr
标志允许您使用正则表达式过滤输出 URL。使用此标志时,它将跳过与指定正则表达式匹配的 URL。
katana -u https://tesla.com -fr 'https://www.tesla.com/*' -silent
Katana 支持基于 DSL 的表达式以实现高级匹配和过滤功能:
katana -u https://www.hackerone.com -mdc ' status_code == 200 '
katana -u https://www.hackerone.com -mdc ' contains(endpoint, "default") && status_code != 403 '
katana -u https://www.hackerone.com -mdc ' contains(to_lower(technologies), "php") '
katana -u https://www.hackerone.com -fdc ' contains(to_lower(technologies), "cloudflare") '
DSL 函数可以应用于 jsonl 输出中的任何键。有关可用 DSL 功能的更多信息,请访问 dsl 项目。
以下是其他过滤器选项 -