Files
2025-10-13 01:29:11 +08:00

29 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### NSE 脚本原理
**1. NSE 脚本的运行机制**
NSE 的核心是一个脚本解释器,它运行用 **Lua 语言**编写的脚本。Nmap 会在扫描过程中加载并执行这些脚本,以扩展其核心功能。整个运行机制可以概括为以下几个步骤:
1. **脚本加载**:Nmap 在启动时,会根据你的命令行参数(如 `-sC``--script <脚本名>`),加载相应的 NSE 脚本。这些脚本文件通常位于 Nmap 的安装目录下的 `scripts` 文件夹中
2. **事件触发**:NSE 脚本不会无缘无故地运行。它依赖于一系列的**事件触发器(Triggers)**,这些触发器会在 Nmap 的不同扫描阶段被激活
- `pre-scan`:在任何主机扫描开始之前运行。通常用于一些全局性任务,如收集 DNS 信息
- `host-scan`:在扫描每个主机时运行。通常用于对单个主机进行枚举或漏洞检测
- `port-scan`:在扫描每个端口时运行。这是最常用的触发器,用于针对特定端口的服务进行探测,如 HTTP、FTP、SSH 等
- `post-scan`:在所有主机扫描完成后运行。通常用于汇总结果或生成报告
3. **脚本执行**:当一个事件被触发时,Nmap 会调用相应脚本中的**`action()` 函数**。这个函数包含了脚本要执行的核心逻辑
4. **结果返回**`action()` 函数执行完毕后,会将结果返回给 Nmap。Nmap 会将这些结果以标准的格式(如 XML、文本等)显示给用户
**2. 编写 NSE 脚本的核心结构**
一个典型的 NSE 脚本由以下几个关键部分组成:
1. **脚本描述(`description`**:一个简短的字符串,描述脚本的功能
2. **分类(`categories`**:脚本的分类,如 `safe`(安全)、`vuln`(漏洞)、`auth`(认证)等。这些分类使得用户可以通过 `-sC``--script=safe` 等参数来批量运行某一类脚本
3. **依赖关系(`dependencies`**:如果脚本依赖于其他脚本,可以在这里声明
4. **触发器(`hostrule`、`portrule` 等)**:指定脚本在什么条件下运行。例如,`portrule` 规定了脚本只在发现某个特定端口开放时才运行
- `portrule = "tcp or udp"`:在所有 TCP 或 UDP 端口上运行
- `portrule = "port:80"`:只在 80 端口上运行
- `hostrule`:在整个主机上运行,不依赖于特定端口
5. **主函数(`action()`**:这是脚本的核心代码,包含了所有业务逻辑。在这个函数中,你可以使用 Nmap 提供的各种库函数(如 `http.get``nmap.set_port_state` 等),来完成网络交互和数据处理