nuclei模板编写&&yaml学习
Nuclei 是一种可快速利用的漏洞扫描程序,旨在探测现代应用程序、基础设施、云平台和网络,帮助
识别和缓解漏洞。
Nuclei的核心是利用模板(表示为简单的 YAML 文件)来描述检测、排名和解决特定安全漏洞的方
法。
每个模板都描述了可能的攻击路线,详细说明了漏洞、其严重性、优先级以及偶尔出现的相关漏洞。
这种以模板为中心的方法确保 Nuclei不仅可以识别潜在威胁,还可以精确定位具有切实现实影响的可
利用漏洞。
nuclei安装教程
安装nuclei的三种方式
1 | go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest |
1 | https://github.com/projectdiscovery/nuclei/releases |
1 | docker pull projectdiscovery/nuclei:latest |
windows下推荐直接下载二进制文件就行了,简单方便
linux下直接1
pip install nuclei
不需要go环境就能下载完成
验证安装成功与否1
nuclei -h
下载以后先更新1
2nuclei -up #更新nuclei
nuclei -ut #更新脚本
nuclei命令集1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102用法:
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)
或者直接使用nuclei给的页面进行
https://cloud.projectdiscovery.io/
yaml学习
基本语法
yaml对象
对象键值对1
2
3
4
5
6
7简单的可以使用冒号形式
key: value冒号后面需要加一个空格
也可以使用key:{key1:value1,key2:value2}
亦或是
key:
child-key:value
child-key2:value2
对于相对比较复杂的对象格式,可以使用一个问好加一个空格表示一个
复杂的KEY,配合一个而冒号加一个空格表示一个value
1 | ? |
表示对象的属性是一个数组[complexkey1,complexkey2]
对象的值也是要给数组[complexvalue1,complexvalue2]
yaml数组
以-
开头表示一个数组
1 | - a |
YAML 支持多维数组,可以使用行内表示:key: [value1,value2,...]
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格1
2
3
4
5-
- a
- b
- c
举一个相对比较复杂的例子1
2
3
4
5
6
7
8
9
10students:
-
id: 1
name: creeper
grade: 100
-
id: 2
name: tenurnight
grade: 120
就是流式里面的1
students: [{id: 1,name: creeper,grade: 100},{id: 2,name: tenurnight,grade: 120}]
复合结构
yml的复合结构
1 | language: |
其实就是json的1
2
3
4
5
6
7
8
9
10
11{
language: ['python','javascript','ruby','go']
websites:
{
yaml: "yaml.org"
ruby: "ruby.org"
python: "python.org"
go: "go.org"
}
}
纯量
纯量是不可分割的,最基本的值
- 字符串
- 布尔值
- 整数
- 浮点型
- NULL
- 时间
- 日期
1 | boolean: |
引用
1 | defaults: &defaults |
相当于1
2
3
4
5
6
7
8
9
10
11
12
13
14defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
就是使用&建立锚点,使用<<表示合并到当前数据,*用来引用锚点
我的理解就是&就是建立一个函数
<<就是告诉你我要在这里引用
*就是调用函数
1 | - &showell Steve |
转换成js就是1
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
参考地址:
https://www.runoob.com/w3cnote/yaml-intro.html
https://www.ruanyifeng.com/blog/2016/07/yaml.html
https://www.jianshu.com/p/97222440cd08
https://daihainidewo.github.io/blog/yaml%E6%95%99%E7%A8%8B/