大家好,欢迎来到IT知识分享网。
目录
Nuclei POC编写小白速通指南
1、Nuclei是什么?
是出家人沙仁必备,行走江湖的一大利器(bushi
是一款基于YAML语法模板的定制化快速漏洞扫描器;可以对主机进行批量快速扫描。
2、为什么用Nuclei
优点:
- 支持HTTP、DNS、TCP、SSL、FILE协议
- 可以进行大规模扫描。
- 基于带外的检测。
- 能够轻松编写自己的模板。
- 基于go语言
缺点:
nuclei在攻防演练中有个非常致命的问题,慢!
因为nuclei的spray规则是所有目标打全量的poc,如此大量的请求包对网络来说绝对是个灾难,要是遇到封的快的环境,也许还没探测到存在的漏洞就已经被ban了。
3、Nuclei工具安装方式
安装前言:
需要先安装Go语言,配置好环境
安装Go环境教程
windows环境安装Go、Nuclei
下载Go环境:所有版本 – The Go Programming Language (google.cn)
选择自己电脑所对应的版本,点击下载;
下载完成之后,放到自己的目录下,然后解压
桌面空白处鼠标右击此电脑—>属性—>高级系统设置—>配置环境变量
需要新建两个环境变量配置
然后将新建的GOROOT配置到 Path 这个环境变量中去,在系统变量中找到 Path,点击编辑->新建,输入%GOROOT%\bin,点击确定。
确定,确定,在确定,最后应用直到桌面。
win+R输入cmd打开终端,输入 go version ,go env
查看一下配置的环境有无问题
可以在cmd终端查看
输入
echo %GOPATH% echo %GOROOT%
出现以上画面 那你就配置成功了嗷!
不过咱的配置到这儿只完成了99%,还差一步,老铁别急,且看我细细道来
接下来还要配置GO111MODULE、GOPROXY、GOSUMDB
为啥要配置这仨小玩意儿捏?
GO111MODULE——>on表示开启mod模式(项目管理需要用到)
输入 go env -w GO111MODULE=on
GOPROXY——>使用go get 安装第三方库的地址
输入 go env -w GOPROXY=https://mirrors.aliyun.com/goproxy
GOSUMDB——>包的MD5校验
输入 go env -w GOSUMDB=off
再次输入 go env
ok了,老铁没毛病
接下来接着在cmd命令行里安装Nuclei,命令如下:
go get -u github.com/projectdiscovery/nuclei/v2/cmd/nuclei
验证安装 运行以下命令来验证Nuclei来验证Nuclei是否正确安装:
nuclei -version
如果一切正常,你就能看到Nuclei的版本号。
Linux环境安装Go、Nuclei
在线源码编译安装 -需安装Go语言
go install -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest
或者选择本地源码编译安装 -需安装Go语言
git clone https://github.com/projectdiscovery/nuclei.git cd nuclei/v2/cmd/nuclei go build mv nuclei /usr/local/bin/ nuclei -version
其他环境安装Go、Nuclei
kali一键安装 不需要安装Go语言,且仅限kali操作系统
apt install nuclei
安装完成之后,使用如下命令,检测是否安装成功
nuclei -version
出现如上图的画面就证明你已经安装成功了嗷!
MacOS一键安装 不需要安装Go语言,仅限MacOS操作系统
brew install nuclei
Docker一键安装 不需要安装Go语言
docker pull projectdiscovery/nuclei:latest
直接下载发行版 不需要安装Go语言,适合各类操作系统
https://github.com/projectdiscovery/nuclei/releases
4、Nuclei工具参数详解
1.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)
2.更新Nuclei
使用nuclei -update命令来将您的Nuclei更新到最新版本。
使用nuclei -update-templates命令来将您的核心模板nuclei-templates更新到最新版本,另外Nuclei本身每24小时也会进行一次自动更新。
yaml是什么?
是一个可读性高,用来表达数据序列化的格式。
切记:
YAML不允许使用制表符
元素部分之间必须有空间
YAML区分大小写
YAML文档标准后缀名是: 1、.yaml 2、.yml
yaml模板内容参数解读如下:
id: 定义了该漏洞验证请求的唯一标识符。 info: 定义了漏洞验证请求的相关信息。 name: 指定了漏洞验证请求的名称。 author: 指定了该漏洞验证请求的作者。 severity: high: 指定了该漏洞验证请求的严重程度。 description: 提供描述信息。 requests: 定义了一个请求列表,包含了漏洞验证请求。 raw: 定义了一个原始请求(HTTP请求)。 matchers-condition: and: 定义了匹配条件的逻辑关系,表示所有匹配条件都必须满足。 matchers: 定义了一组匹配条件,用于验证漏洞存在性。 type: word: 指定了匹配条件的类型为关键词匹配。 part: header: 指定了关键词匹配的范围是HTTP头部。 words: 指定了需要匹配的关键词。 type: status: 指定了匹配条件的类型为状态码。 status: 指定了需要匹配的HTTP响应状态码,表示需要匹配HTTP响应状态码是否为200。
yaml POC模板
id: Vulnerability template info: name: Vulnerability template author: I9nite severity: high description:描述信息 requests: - raw: GET matchers-condition: and matchers: - type: word part: header words: - 'There are loopholes' - type: status status: - 200
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156821.html