Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Redpoint — Nmap NSE 脚本,用于 ICS/SCADA 发现与枚举——BACnet、EtherNet/IP、CoDeSys、Fox、Modicon、Omron、S7——通过协议查询进行安全评估。 | Kitploit
工具/GitHubGitHub/digitalbond/redpoint
侦察SCADA/ICS安全信息收集网络安全渗透测试SCADA/ICS安全 分类第 5 名
GitHubdigitalbond/redpoint

Redpoint

Nmap NSE 脚本,用于 ICS/SCADA 发现与枚举——BACnet、EtherNet/IP、CoDeSys、Fox、Modicon、Omron、S7——通过协议查询进行安全评估。

查看仓库
4721498010年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

#Redpoint

###Digital Bond 的 ICS 枚举工具

Redpoint 是 Digital Bond 的一个研究项目,用于枚举 ICS 应用和设备。

我们在评估中使用 Redpoint 工具来发现 ICS 设备并获取对二次测试有帮助的信息。其中部分工具将作为 Nmap NSE 脚本在本仓库中向公众开放。

Redpoint 工具使用合法的协议或应用命令来发现和枚举设备及应用。本工具不试图利用漏洞或使任何东西崩溃。然而,许多 ICS 设备和应用较为脆弱,任何意外流量都可能导致其崩溃或以意外方式响应,因此请谨慎使用。

每个脚本都在下面进行了说明,并以 .nse 文件形式存在于本仓库中。

  • BACnet-discover-enumerate.nse - 识别并枚举 BACnet 设备

  • codesys-v2-discover.nse - 识别并枚举 CoDeSys V2 控制器

  • enip-enumerate.nse - 识别并枚举来自罗克韦尔自动化(Rockwell Automation)及其他厂商的 EtherNet/IP 设备

  • fox-info.nse - 识别并枚举 Niagara Fox 设备

  • modicon-info.nse - 识别并枚举施耐德电气(Schneider Electric)Modicon PLC

  • omron-info.nse - 识别并枚举欧姆龙(Omron)PLC

  • pcworx-info.nse - 识别并枚举支持 PC Worx 协议的 PLC

  • proconos-info.nse - 识别并枚举支持 ProConOS 的 PLC

  • s7-enumerate.nse - 识别并枚举西门子(Siemens)SIMATIC S7 PLC

==

###BACnet-discover-enumerate.nse

![BACnet-discover-enumerate Sample Output] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/03/BACnet-nse.png)

####作者

Stephen Hilt and Michael Toecker
Digital Bond, Inc

####目的与描述

BACnet-discover-enumerate.nse 的目的是首先识别某个 IP 连接设备是否运行 BACnet。其原理是使用预生成的 BACnet 消息查询设备。较新版本的 BACnet 协议会以确认消息响应,而较旧版本则会返回 BACnet 错误消息。只要收到确认或错误中的任意一种,就足以证明目标 IP 地址上存在支持 BACnet 的设备。

其次,如果收到确认消息,该脚本还会尝试在响应的 BACnet 设备上枚举多个 BACnet 属性。同样,设备会收到预先生成的 BACnet 消息查询。成功的枚举使用特制构造的请求,如果 BACnet 设备不支持该属性,则无法成功。

此脚本查询的 BACnet 属性包括:

  1. 厂商 ID(Vendor ID)- 对应于已注册 BACnet 厂商的编号。脚本还会返回关联的厂商名称。

  2. 厂商编号(Vendor Number)- 表示设备上配置的厂商名称的字符串。它可能与厂商 ID 不同,因为厂商 ID 是在 ASHARE 注册的编号。

  3. 对象标识符(Object Identifier)- 唯一标识设备的编号。如果已知对象标识符,就可以使用 BACnet 客户端软件发送命令,包括更改 BACnet 设备上的值、程序、时间表及其他操作信息。这是所有 BACnet 设备必有的属性。

  4. 固件版本(Firmware Revision)- BACnet 设备上固件的修订号。

  5. 应用软件版本(Application Software Revision)- 用于 BACnet 通信的软件的修订号。

  6. 对象名称(Object Name)- 用户定义的字符串,用于为 BACnet 设备分配名称,通常由技术人员在调试时输入。这是所有 BACnet 设备必有的属性。

  7. 型号名称(Model Name)- BACnet 设备的型号

  8. 描述(Description)- 用户定义的字符串,用于描述设备,通常由技术人员在调试时输入

  9. 位置(Location)- 用户定义的字符串,用于记录设备的物理位置,通常由技术人员在调试时输入

  10. 广播分发表(BDT)- BACnet 网络中 BACnet 广播管理设备(BBMD)的列表。这将识别出 BACnet 网络中的所有子网。

  11. 外部设备表(FDT)- 在 BACnet 设备上注册的外部设备列表。外部设备是指不在 BACnet 网络子网中、也不在 BDT 中的任何设备。外部设备通常位于外部网络上,可能是攻击者的 IP 地址。

BDT 和 FDT 可能是很大的列表,在大规模 Nmap 扫描中可能并不需要。基础脚本不会拉取 BDT 和 FDT。使用 --script-args full=yes 运行命令即可拉取 BDT 和 FDT,请参阅“用法”部分。

![BACnet-discover-enumerate Sample Output with BDT and FDT] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/08/screenshot_bacnet-1.png)

该脚本使用了 2004 年添加到 BACnet 规范中的一项功能,只需单个请求即可获取设备的对象标识符,而无需作为外部设备加入 BACnet 网络。(详见 ANSI/ASHRAE 标准 135-2001 的 ANSI/ASHRAE 附录 a)

####历史与背景

摘自维基百科上关于 BACnet 的文章 http://en.wikipedia.org/wiki/BACnet:

BACnet 是一种用于楼宇自动化与控制网络的通信协议。它是 ASHRAE、ANSI 和 ISO 标准[1]协议。BACnet 流量的默认端口为 UDP/47808。

BACnet 用于楼宇自动化与控制系统,应用包括供暖、通风和空调控制、照明控制、门禁控制、火灾探测系统及其相关设备。BACnet 协议为计算机化的楼宇自动化设备提供了交换信息的机制,无论它们执行何种特定的楼宇服务。

####安装

此脚本需要 nmap 才能运行。如果你还没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html

#####Windows

下载 bacnet-discover.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以管理员身份进行。转至“开始 -> 程序 -> 附件”,右键单击“命令提示符”,然后选择“以管理员身份运行”。

move BACnet-discover-enumerate.nse C:\Program Files (x86)\Nmap\scripts

#####Linux

下载 BACnet-discover-enumerate.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以 sudo/root 身份完成。

sudo mv BACnet-discover-enumerate.nse /usr/share/nmap/scripts
	

####用法

在终端窗口/命令提示符中,使用以下任一命令,其中 host 是你希望扫描 BACNet 的目标。如果你希望输出包含 BDT 和 FDT,请使用 --script-args full=yes。

Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate <host>
Windows: nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>

Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate <host> 
Linux: sudo nmap -sU -p 47808 --script BACnet-discover-enumerate --script-args full=yes <host>

要加快结果获取速度,可在扫描期间使用 -n 选项跳过 DNS 查找;同时使用 -Pn 选项禁用 ping,以检测设备是否在线,从而获得完整结果。

nmap -sU -Pn -p 47808 -n --script BACnet-discover-enumerate <host>

	

####备注

此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/blob/master/BACnet-discover-enumerate.nse

此脚本使用标准 BACnet 源端口和目标端口 UDP 47808。

较新的(2004 年 2 月 25 日之后)BACnet 设备按规范要求必须响应使用“catchall”(全能匹配)对象标识符并带有自身有效实例编号的特定请求(详见 ANSI/ASHRAE 标准 135-2001 的 ANSI/ASHRAE 附录 a)。较旧版本的 BACnet 设备可能不会响应此全能请求,而是返回 BACnet 错误数据包。

此脚本不会尝试以外部设备身份加入 BACnet 网络,它只是将 BACnet 请求直接发送到具有 IP 地址的设备。

== ###codesys-v2-discover.nse ![codesys-v2-discover Sample Output] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2016/03/codesys-v2-discover-win.png)

####作者

Stephen Hilt, Reid Wightman

####目的与描述

codesys-v2-discover.nse 脚本用于识别运行 3S-Software GmbH 开发的第 2 版梯形逻辑运行时的 PLC。这些控制器使用专有的二进制协议来安装新的梯形逻辑,并调试正在运行的梯形逻辑。该协议可能需要身份验证。实际上,很少有设备支持此功能。此脚本不测试身份验证。

此脚本向设备发送一个简单的识别请求。响应消息可能包含 PLC 上运行的 CoDeSys 操作系统和具体版本点。

####历史与背景

Digital Bond 于 2012 年 4 月发布了 CoDeSys 运行时系统“天生不安全”(insecure-by-design)的详细信息。该协议通常使用 TCP/1200 或 TCP/2455 作为控制端口。控制协议包含从控制器上传和下载文件的功能。该协议还可能提供命令 shell,从而提供额外的功能。Shell 功能通常包括启动和停止当前正在运行的梯形逻辑,以及从控制器获取调试信息。

最初的公告仅适用于运行时版本 2。Digital Bond 还发布了一个概念验证 Nmap 脚本,该脚本最初由 HD Moore 在其互联网扫描项目中编写。

该协议版本还制作了一个 Nessus 脚本,但该 Nessus 脚本包含一个错误,无法正确检查具有大端 CPU 的控制器。

####安装

此脚本需要 Nmap 才能运行。如果你还没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html

#####Windows

下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以管理员身份进行。转至“开始 -> 程序 -> 附件”,右键单击“命令提示符”,然后选择“以管理员身份运行”。

    move codesys-v2-discover.nse C:\Program Files (x86)\Nmap\scripts

#####Linux

下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以 sudo/root 身份完成。

    sudo mv codesys-v2-discover.nse /usr/share/nmap/scripts

####用法

在终端窗口/命令提示符中,使用以下任一命令,其中 是你希望扫描 EtherNet/IP 的目标。

    Windows: nmap -p 1200,2455 --script codesys-v2-discover <host>

    Linux: sudo nmap -p 1200,2455 --script codesys-v2-discover <host>

####备注

此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/codesys-v2-discover.nse

此脚本将尝试在任何开放端口上发送 CoDeSys 请求。虽然大多数控制器使用标准端口 1200 或 2455,但某些控制器使用备用端口,如 1201、1217 以及其他端口。

== ###enip-enumerate.nse ![enip-enumerate Sample Output] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/enip.png)

####作者

Stephen Hilt
Digital Bond, Inc

####目的与描述

enip-enumerate.nse 的目的是识别并枚举 EtherNet/IP 设备。罗克韦尔自动化(Rockwell Automation)/ Allen Bradley 开发了该协议,并且是这些设备的主要制造商,例如 ControlLogix 和 MicroLogix。但这是一个开放标准,许多厂商都提供 EtherNet/IP 接口卡或解决方案。

通过使用列表身份消息(List Identities Message,0x63)查询 TCP/44818,可以明确识别 EtherNet/IP 设备。响应消息将确定其是否为 EtherNet/IP 设备,并解析信息以枚举该设备。

EtherNet/IP 请求列表身份(List Identities)会获取有关设备的基本信息,即设备的“电子密钥”(electronic key)。信息包括厂商、产品名称、序列号、设备类型、产品代码和修订号。此外,该脚本还会从数据包 EtherNet/IP 帧中的套接字地址字段解析设备配置的 IP 地址。

此脚本解析的 EtherNet/IP 属性包括:

  1. 厂商(Vendor)- 一个双字节整数,用于查找厂商名称

  2. 产品名称(Product Name)- 表示产品/产品系列的简短描述的字符串,最大长度为 32 个字符

  3. 序列号(Serial Number)- 以十六进制存储的六字节数字,按小端序(little Endian)存储

  4. 设备类型(Device Type)- 一个双字节整数,用于查找设备类型。该字段通常未使用并设置为 0。

  5. 产品代码(Product Code)- 厂商分配的产品代码用于标识设备类型中的特定产品。由于脚本无法访问厂商的产品代码表,因此显示的是数字。

  6. 修订号(Revision)- 两个单字节整数,分别列出设备的主修订号和次修订号

  7. 设备 IP(Device IP)- 四个单字节整数,表示设备配置的 IP 地址。该地址通常与脚本扫描的 IP 地址不同。

####历史与背景

摘自维基百科上关于 EtherNet/IP 的文章 http://en.wikipedia.org/wiki/EtherNet/IP

EtherNet/IP 由罗克韦尔自动化(Rockwell Automation)于 20 世纪 90 年代末开发,是罗克韦尔工业以太网网络解决方案的一部分。罗克韦尔为 EtherNet/IP 命名,并将其移交给了 ODVA。ODVA 现在管理该协议,并要求如今任何利用该协议开发的新产品都必须遵守既定标准,从而确保多厂商系统的互操作性。

EtherNet/IP 最常用于工业自动化控制系统,例如水处理厂、制造设施和公用事业。多家控制系统厂商已开发出可通过 EtherNet/IP 进行通信的可编程自动化控制器和 I/O。

####安装

下载工具