nuclei 使用說明
1. 項目簡介
Nuclei是一款注重於可配置性、可擴展性和易用性的基於模板的快速漏洞驗證工具。
2. 下載地址
- 工具下載地址
https://github.com/projectdiscovery/nuclei
- 掃描模版下載地址
https://github.com/projectdiscovery/nuclei-templates
3. 基本指令
# nuclei -h
用法:
nuclei [命令]
命令:
目標:
-u, -target string[] 指定掃描的URL/主機
-l, -list string 指定需要掃描的URL/主機文件(一行一個)
模板:
-t, -templates string[] 指定需要掃描的模板或者模板的路徑
-nt, -new-templates 只掃描最新版本中添加的模板
-w, -workflows string[] 指定掃描中的工作流或者工作流目錄
-validate 驗證通過的模板
-tl 列出所有可用的模板
過濾:
-tags string[] 執行有標記的模板子集
-etags, -exclude-tags string[] 執行標記為排除的模板
-itags, -include-tags string[] 不執行具有攻擊性的模板
-et, -exclude-templates string[] 要排除的模板或者模板目錄
-it, -include-templates string[] 執行默認或配置中排除的模板
-s, -severity value[] 根據嚴重程度運行模板,可候選的值有:info,low,medium,high,critical
-es, -exclude-severity value[] 根據嚴重程度排除模板,可候選的值有:info,low,medium,high,critical
-a, -author string[] 執行指定作者的模板
輸出:
-o, -output string 輸出發現的問題到文件
-silent 只顯示結果
-nc, -no-color 禁用輸出內容着色(ANSI轉義碼)
-json 輸出為jsonL(ines)
-irr, -include-rr 在JSONL中輸出對應的請求和相應(僅結果)
-nm, -no-meta 不顯示匹配的元數據
-nts, -no-timestamp 不在輸出中顯示時間戳
-rdb, -report-db string 本地的Nuclei結果數據庫(始終使用該數據庫保存結果)
-me, -markdown-export string 以markdown導出結果
-se, -sarif-export string 以SARIF導出結果
配置:
-config string 指定Nuclei的配置文件
-rc, -report-config string 指定Nuclei報告模板文件
-H, -header string[] 指定報告中的標題:value格式
-V, -var value 通過var=value指定var值
-r, -resolvers string 指定Nuclei的解析文件
-sr, -system-resolvers 當DNS錯誤時使用系統DNS
-passive 啟用被動掃描處理HTTP響應
-ev, env-vars 在模板中使用環境變量
交互:
-inserver, -ineractsh-server string 使用interactsh反連檢測平台(默認為"https://interact.sh")
-itoken, -interactsh-token string 指定反連檢測平台的身份憑證
-interactions-cache-size int 指定保存在交互緩存中的請求數(默認:5000)
-interactions-eviction int 從緩存中刪除請求前等待的時間(默認為60秒)
-interactions-poll-duration int 每個輪詢前等待時間(默認為5秒)
-interactions-cooldown-period int 退出輪詢前的等待時間(默認為5秒)
-ni, -no-interactsh 禁用反連檢測平台,同時排除基於反連檢測的模板
限速:
-r1, -rate-limit int 每秒最大請求量(默認:150)
-rlm, -rate-limit-minute int 每分鍾最大請求量
-bs, -bulk-size int 每個模板最大並行檢測數(默認:25)
-c, -concurrency int 並行執行的最大模板數量(默認:25)
優化:
-timeout int 超時時間(默認為5秒)
-retries int 重試次數(默認:1)
-mhe, -max-host-error int 某主機掃描失敗次數,跳過該主機(默認:30)
-project 使用項目文件夾避免多次發送同一請求
-project-path string 設置特定的項目文件夾
-spm, -stop-at-first-path 得到一個結果后停止(或許會中斷模板和工作流的邏輯)
-stream 流模式 - 在不整理輸入的情況下詳細描述
無界面瀏覽器:
-headless 啟用需要無界面瀏覽器的模板
-page-timeout int 在無界面下超時秒數(默認:20)
-sb, -show-brower 在無界面瀏覽器運行模板時,顯示瀏覽器
-sc, -system-chrome 不使用Nuclei自帶的瀏覽器,使用本地瀏覽器
調試:
-debug 顯示所有請求和響應
-debug-req 顯示所有請求
-debug-resp 顯示所有響應
-proxy, -proxy-url string 使用HTTP代理
-proxy-socks-url string 使用SOCK5代理
-tlog, -trace-log string 寫入請求日志到文件
-version 顯示版本信息
-v, -verbose 顯示詳細信息
-vv 顯示額外的詳細信息
-tv, -templates-version 顯示已安裝的模板版本
升級:
-update 更新Nuclei到最新版本
-ut, -update-templates 更新Nuclei模板到最新版
-ud, -update-directory string 覆蓋安裝模板
-duc, -disable-update-check 禁用更新
統計:
-stats 顯示正在掃描的統計信息
-sj, -stats-json 將統計信息以JSONL格式輸出到文件
-si, -stats-inerval int 顯示統計信息更新的間隔秒數(默認:5)
-m, -metrics 顯示Nuclei端口信息
-mp, -metrics-port int 更改Nuclei默認端口(默認:9092)
4. 使用方法
首次運行 nuclei會自動下載掃描模版nuclei-templates,下載路徑是/<user>/nuclei-tamplates,后續如果不指定掃描模版,都會使用全部模版掃描。
- 掃描單個目標
nuclei -u <url>
- 掃描多個目標
nuclei -l <list.txt>
- 指定模版掃描
可以是特定的模版文件或是路徑
nuclei -u <url> -t <poc.yaml/poc_dir>
- 掃描結果輸出
nuclei -u <url> -o <results.txt>
nuclei -u <url> -o <results.json> -json -irr
- 調試模版
nuclei -u <url> -debug -t <poc.yaml>
5. 掃描模版
5.1 模版簡介
nuclei啟動時會更新掃描模版,掃描模板文件基於YAML格式。
- 官方模版指南地址
https://nuclei.projectdiscovery.io/templating-guide/
- YAML 編寫規范
https://github.com/projectdiscovery/nuclei/blob/master/SYNTAX-REFERENCE.md
5.2 模版解析
這里以xxljob-default-login.yaml為例,簡單介紹常用的一些模版以及相關參數,熟悉參數后可以我們自定義編寫掃描模版。
id: xxljob-default-login
info:
name: XXL-JOB Default Login
author: pdteam
severity: high
tags: default-login,xxljob
reference: https://github.com/xuxueli/xxl-job
requests:
- raw:
- |
POST /xxl-job-admin/login HTTP/1.1
Host:{{Hostname}}
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
userName={{username}}&password={{password}}
payloads:
username:
- admin
password:
- 123456
attack: pitchfork
matchers-condition: and
matchers:
- type: word
words:
- '"code":200'
- '"msg"'
- '"content"'
condition: and
- type: word
words:
- 'application/json'
- 'XXL_JOB_LOGIN_IDENTITY'
part: header
condition: and
status:
- 200
- id、info
id是掃描模版的唯一標識,有cve、cnvd可以以cve id或是cnvd id命名。另外不能帶空格。
info主要寫基本信息,名稱name、作者author、漏洞級別severity、出處reference等等。
- requests
raw需要原始http請求,body里的{{username}}和{{password}}對應payloads里的字段,即發送請求時會填入字段值,即實際請求為userName=admin&password=123456。
- payloads
匹配參數可以是特定的參數,也可以是path文件路徑,用於Fuzz。
attack即攻擊類型,有batteringram、pitchfork、clusterbomb,同burp Intruder。
batteringram:使用同一字典,將所有標記字段同時替換。如用戶名和密碼相同:
userName={{key}}&password={{key}}
payloads:
key:
- admin
attack: batteringram
pitchfork:每個標記字段單獨設置字典,按照一一對應的關系進行組合。如存在多個用戶名密碼,並且一一對應:
userName={{username}}&password={{password}}
payloads:
username:
- admin
- root
password:
- admin123
- password
attack: pitchfork
clusterbomb:使用窮舉法,對每個標記字段都遍歷字典。如針對特定用戶名進行爆破的情況:
userName={{username}}&password={{password}}
payloads:
username:
- admin
- root
password:
- password
- toor
- default
- 123456789
attack: clusterbomb
- matcher
匹配器,主要用於設置匹配條件。
matchers-condition用於多個匹配條件的關聯,and即需要滿足所有匹配條件,or則是滿足其中一個條件就算是true。
type里word即關鍵字匹配,part用於限制匹配的位置。status匹配狀態碼。
