输入
请求中的第一部分是inputs。输入是将发送到服务器的数据,以及可选的从服务器读取的任何数据。 最简单的方式是指定一个字符串,它会通过网络套接字发送。read-size就可以实现这一点。你还可以为读取的数据指定名称,这样就可以对该部分进行匹配。
主机
请求的下一部分是要连接的host。可以在路径中放置动态变量,以在运行时修改其值。变量以{{开始,以}}结束,并且区分大小写。
- Hostname - 变量会被命令行提供的主机名替换。
tls://前缀即可。
端口
从Nuclei v2.9.15开始,在网络模板中引入了一个名为port的新字段。此字段允许用户单独指定端口,而不是将其包含在host字段中。
之前,如果你想为针对SSH的漏洞利用编写网络模板,你必须在host字段中同时指定主机名和端口,像这样:
xyz-ssh-exploit模板将向scanme.sh:22发送一个请求,向scanme.sh:8443发送另一个请求,这可能会返回意外响应,最终导致错误。这在自动化场景中尤其成问题。
为了解决这些问题,同时保持现有功能,网络模板现在可以按以下方式编写:
80、443、8080、8443、8081、53)除外。此外,可以通过添加一个名为exclude-ports的新字段来自定义默认保留端口列表:
exclude-ports时,默认保留端口列表将被覆盖。这意味着如果要在端口80上运行网络模板,则必须在port字段中明确指定。
从Nuclei v3.1.0开始,port字段支持逗号分隔的值,并且可以在port字段中指定多个端口。例如,如果要在端口5432和5433上运行网络模板,可以在port字段中这样指定:
匹配器/提取器部分
Network协议支持的有效part值用于匹配器/提取器如下:
| 值 | 描述 |
|---|---|
| request | 网络请求 |
| data | 从网络套接字读取的最终数据 |
| raw / body / all | 从套接字接收的所有数据 |
网络模板示例
下面提供了用于检测服务器上运行的MongoDB的hex编码输入的最终示例模板文件,其中包含工作匹配器: