功能 • 安裝 • 使用 • 範圍 • 設定 • 過濾器 • 加入 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 項目。
以下是其他過濾器選項 -