nuclei——自定義模版漏洞驗證工具


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是掃描模版的唯一標識,有cvecnvd可以以cve id或是cnvd id命名。另外不能帶空格。

info主要寫基本信息,名稱name、作者author、漏洞級別severity、出處reference等等。

  • requests

raw需要原始http請求,body里的{{username}}{{password}}對應payloads里的字段,即發送請求時會填入字段值,即實際請求為userName=admin&password=123456

  • payloads

匹配參數可以是特定的參數,也可以是path文件路徑,用於Fuzz

attack即攻擊類型,有batteringrampitchforkclusterbomb,同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

typeword即關鍵字匹配,part用於限制匹配的位置。status匹配狀態碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM