• 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匹配状态码。

  • 相关阅读:
    设计模式学习08:享元模式
    设计模式学习07:适配器模式
    设计模式学习06:策略模式和简单工厂模式
    XCode Debugger中的Icon符号的意义
    蒲公英——APP内测分发平台
    分享申请IDP账号的过程,包含duns申请的分享
    Dash——程序员的的好帮手:API文档浏览器+代码片段管理工具
    xScope——界面设计师的终极工具箱
    Alcatraz——Xcode插件管理工具
    苹果向开发者发布 Xcode 6.3.2 GM版 修复 Bug
  • 原文地址:https://www.cnblogs.com/cijian9000/p/16006359.html
Copyright © 2020-2023  润新知