#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 属性包括:
厂商 ID(Vendor ID)- 对应于已注册 BACnet 厂商的编号。脚本还会返回关联的厂商名称。
厂商编号(Vendor Number)- 表示设备上配置的厂商名称的字符串。它可能与厂商 ID 不同,因为厂商 ID 是在 ASHARE 注册的编号。
对象标识符(Object Identifier)- 唯一标识设备的编号。如果已知对象标识符,就可以使用 BACnet 客户端软件发送命令,包括更改 BACnet 设备上的值、程序、时间表及其他操作信息。这是所有 BACnet 设备必有的属性。
固件版本(Firmware Revision)- BACnet 设备上固件的修订号。
应用软件版本(Application Software Revision)- 用于 BACnet 通信的软件的修订号。
对象名称(Object Name)- 用户定义的字符串,用于为 BACnet 设备分配名称,通常由技术人员在调试时输入。这是所有 BACnet 设备必有的属性。
型号名称(Model Name)- BACnet 设备的型号
描述(Description)- 用户定义的字符串,用于描述设备,通常由技术人员在调试时输入
位置(Location)- 用户定义的字符串,用于记录设备的物理位置,通常由技术人员在调试时输入
广播分发表(BDT)- BACnet 网络中 BACnet 广播管理设备(BBMD)的列表。这将识别出 BACnet 网络中的所有子网。
外部设备表(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 属性包括:
厂商(Vendor)- 一个双字节整数,用于查找厂商名称
产品名称(Product Name)- 表示产品/产品系列的简短描述的字符串,最大长度为 32 个字符
序列号(Serial Number)- 以十六进制存储的六字节数字,按小端序(little Endian)存储
设备类型(Device Type)- 一个双字节整数,用于查找设备类型。该字段通常未使用并设置为 0。
产品代码(Product Code)- 厂商分配的产品代码用于标识设备类型中的特定产品。由于脚本无法访问厂商的产品代码表,因此显示的是数字。
修订号(Revision)- 两个单字节整数,分别列出设备的主修订号和次修订号
设备 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。
####安装
此脚本需要 Nmap 才能运行。如果你还没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html
#####Windows
下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以管理员身份进行。转至“开始 -> 程序 -> 附件”,右键单击“命令提示符”,然后选择“以管理员身份运行”。
move enip-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录,此操作必须以 sudo/root 身份完成。
sudo mv enip-enumerate.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下任一命令,其中 是你希望扫描 EtherNet/IP 的目标。
Windows: nmap -p 44818 --script enip-enumerate <host>
Linux: sudo nmap -p 44818 --script enip-enumerate <host>
####备注
此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/enip-enumerate.nse
此脚本使用标准 EtherNet/IP 目标端口 TCP 44818。
==
###fox-info.nse ![fox-info Sample Output] (http://www.digitalbond.com/wp-content/uploads/2014/10/fox-example.png)
####作者
Stephen Hilt
Digital Bond, Inc
####目的与描述
fox-info.nse 的目的是识别运行 Niagara Fox 协议的设备。此脚本基于 Billy Rios 和 Terry McCorkle 提供的工作和示例。
成功连接到 Niagara Fox 设备后,脚本将解析设备发送的响应并显示枚举出的信息。
此脚本查询的 Niagara Fox 属性包括:
Fox 版本(Fox Version)- 设备上当前运行的 Fox 协议版本。
主机名(Host Name)- 设备的主机名。这通常是远程设备的工作站名称。
主机地址(Host Address)- 设备上配置的 IP 地址。这可以是扫描到的 IP 地址,也可以是设备位于执行网络地址转换(NAT)的设备后面时的私有地址。
应用程序名称(Application Name)- 远程设备上运行的应用程序名称。通常是“Workbench”或“Station”。
应用程序版本(Application Version)- 先前枚举的应用程序名称的版本号。
虚拟机名称(VM Name)- 运行该应用程序的 Java 虚拟机的名称。
虚拟机版本(VM Version)- 远程设备上运行的 VM 的版本号。这很可能是 Java HotSpot 版本号。
操作系统名称(OS Name)- 设备上运行 Fox 协议的操作系统名称,例如 QNX 或 Windows XP。
时区(Time Zone)- 设备上配置的本地时区。
主机 ID(Host ID)- 用于标识设备的唯一 ID。
虚拟机 UUID(VM UUID)- Java 虚拟机的通用唯一标识符。
品牌 ID(Brand ID)- 每个获得许可的站点和工具都有一个品牌标识符。该字段包含 OEM 为其产品线选择的文本描述符作为标识符。每个站点或工具只能有一个 BrandID 条目。
####历史与背景
Fox 是一种专有 TCP/IP 协议,用于 Tridium 楼宇自动化解决方案的 Niagara Framework 中的站点到站点以及工作台到站点的通信。Tridium 是霍尼韦尔(Honeywell)的全资子公司。
####安装
此脚本需要 Nmap 才能运行。如果你还没有 Nmap,请下载并安装 Nmap,请参阅: http://nmap.org/download.html
#####Windows
下载 fox-info.nse 后,将其移动到 NSE 脚本目录。此移动操作必须以管理员身份进行。转至“开始 -> 程序 -> 附件”,右键单击“命令提示符”,然后选择“以管理员身份运行”。
move fox-info.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 fox-info.nse 后,将其移动到 NSE 脚本目录。此操作必须以 sudo/root 身份完成。
sudo mv fox-info.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下任一命令,其中 host 是你希望扫描支持 Niagara Fox 协议的设备的目标。
Windows: nmap -p 1911 --script fox-info <host>
Linux: sudo nmap -p 1911 --script fox-info <host>
####备注
此脚本的官方版本维护于: https://github.com/digitalbond/Redpoint/blob/master/fox-info.nse
此脚本使用标准 Niagara Fox 源端口和目标端口 TCP 1911。
==
###modicon-info.nse ![modicon-info sample output] (http://www.digitalbond.com/wp-content/uploads/2014/09/Modicon.png)
####作者
Stephen Hilt
Digital Bond, Inc
####目的与描述
modicon-info.nse 的目的是识别并枚举施耐德电气(Schneider Electric)制造的 Modicon PLC。
该脚本首先识别某个 IP 连接设备是否发送 Modbus 功能码 43 请求。即使设备不支持功能码 43,其响应也足以识别 Modbus 设备。如果响应的厂商名称包含字符串 Schneider,脚本将使用施耐德电气专有的 Modbus 功能码 90 对该设备进行枚举。
脚本输出中包含的 Modbus 功能码 43 和功能码 90 属性如下:
厂商名称(Vendor Name)- 此脚本将忽略所有不包含“Schneider”的设备。2) 网络模块 - Modicon PLC 中的以太网通信模块。
CPU 模块 - Modicon PLC 中的 CPU 模块。
固件 - Modicon PLC 中 CPU 模块上的固件版本。
存储卡 - CPU 模块中存储卡的型号。
项目信息 - 有关项目的杂项信息,例如项目名称、用于配置项目的 Unity Pro 版本,以及对 PLC 进行编程的工作站名称。某些设备会提供配置该设备的工作站上 .stu 文件的位置。
项目修订版 - 在 PLC 上运行的项目的修订版;每次项目构建并传输到 PLC 时,项目修订号会增加 1。
项目最后修改日期 - 存储的一个时间戳,记录 PLC 最后一次被技术人员修改的时间。
####历史与背景
摘自维基百科上关于可编程逻辑控制器的文章 http://en.wikipedia.org/wiki/Programmable_logic_controller#History:
1968 年,GM Hydra-Matic(通用汽车的自动变速器部门)基于工程师 Edward R. Clark 撰写的一份白皮书,发布了一份关于用电子设备替代硬接线继电器系统的提案请求。中标的提案来自马萨诸塞州贝德福德的 Bedford Associates。第一个 PLC 被命名为 084,因为它是 Bedford Associates 的第八十四个项目。[2] Bedford Associates 成立了一家新公司,专门开发、制造、销售和维修这一新产品:Modicon,即 MOdular DIgital CONtroller(模块化数字控制器)。参与该项目的人员之一是 Dick Morley,他被认为是 PLC 的“父亲”。[3] Modicon 品牌于 1977 年出售给 Gould Electronics,后来被德国公司 AEG 收购,随后又被法国施耐德电气(Schneider Electric)收购,即目前的所有者。
####安装
此脚本需要 Nmap 才能运行。如果你没有 Nmap,请下载并安装 Nmap。
http://nmap.org/download.html
#####Windows
下载 modicon-info.nse 后,将其移动到 NSE 脚本目录中。这需要管理员权限。转到“开始 -> 程序 -> 附件”,右键单击“命令提示符”。选择“以管理员身份运行”。
move modicon-info.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 modicon-info.nse 后,将其移动到 NSE 脚本目录中。此操作必须以 sudo/root 身份完成。
sudo mv modicon-info.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下命令之一,其中 是你希望扫描 Modicon PLC 的目标地址。
Windows: nmap -p 502 --script modicon-info.nse -sV <host>
Linux: sudo nmap -p 502 --script modicon-info.nse -sV <host>
####备注
此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/modicon-info.nse
此脚本使用标准的 Modbus 目标端口 TCP 502。
== ###omrontcp-info.nse & omronudp-info.nse ![omrontcp/udp-info Sample Output] (http://www.digitalbond.com/wp-content/uploads/2015/02/Region.png)
####作者
Stephen Hilt
Digital Bond, Inc
####目的与描述
omrontcp-info 和 omronudp-info 的目的是识别和枚举 OMRON FINS 设备。Omron 开发了该协议,并且是支持该协议设备的主要制造商。
通过使用读取控制器状态(Read Controller Status,0x0501)查询 TCP/9600 或 UDP 9600,可以确定设备是否为 OMRON FINS 设备。响应消息将判断它是否为 OMRON FINS 设备,并解析信息以枚举该设备。
OMRON FINS 读取控制器状态可获取设备的基本信息,例如控制器型号、控制器版本、程序区大小、IOM 大小、DM 字数、定时器/计数器大小、扩展 DMZ 大小、步数/转换数、存储卡类型和存储卡大小。
此脚本解析的 OMRON FINS 属性包括:
控制器型号 - 不超过 20 字节的字符串,表示控制器型号。
控制器版本 - 表示版本号的字符串,不超过 20 字节。
供系统使用 - 保留供系统使用。收集此信息只是为了查看该字段中是否有任何有趣的内容。
程序区大小 - PC 设置和程序区的大小。
IOM 大小 - 可以使用位/字命令的区域大小。
DM 字数 - DM 区中的总字数。
定时器/计数器大小 - 可用的最大定时器/计数器数量。
扩展 DM 大小 - 扩展 DM 区中的存储体(Banks)数量。
步数/转换数 - 可用的最大步数/转换数。
存储卡类型 - 00:无存储卡 01:SPRAM 02:EPROM 03:EEPROM
存储卡大小 - 存储卡的大小(以 Kb 为单位)。
####历史与背景
FINS(Factory Intelligent Network Services,工厂智能网络服务)是一种利用命令与 PLC 通信的协议。该协议支持基于 UDP 的版本以及基于 TCP 的版本。这两种协议存在一些差异,因此编写了两个脚本以支持同时扫描 TCP 和 UDP 服务。
OMRON FINS 用于工业自动化控制系统,例如水处理厂、制造设施和公用事业。
####安装
此脚本需要 Nmap 才能运行。如果你没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html
#####Windows
下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以管理员身份完成。转到“开始 -> 程序 -> 附件”,右键单击“命令提示符”。选择“以管理员身份运行”。
move omron*.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 enip-enumerate.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以 sudo/root 身份完成。
sudo mv omron*.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下命令之一,其中 是你希望扫描 OMRON FINS 的目标地址。
Windows: nmap -p 9600 --script omrontcp-info <host>
Windows: nmap -sU -p 9600 --script omronudp-info <host>
Linux: nmap -p 9600 --script omrontcp-info <host>
Linux: sudo nmap -sU -p 9600 --script omronudp-info <host>
####备注
此脚本的官方 TCP 版本维护于:https://github.com/digitalbond/Redpoint/omrontcp-info.nse
此脚本的官方 UDP 版本维护于:https://github.com/digitalbond/Redpoint/omronudp-info.nse
这些脚本使用标准的 FINS 和 TCP/FINS 目标端口:UDP 9600 和 TCP 9600。
== ###pcworx-info.nse ![pcworx-info Sample Output] (http://www.digitalbond.com/wp-content/uploads/2015/02/pcworx.png)
####作者
Stephen Hilt
Digital Bond, Inc
####目的与描述
pcworx-info.nse 的目的是通过 PC Worx 协议识别和枚举 Phoenix Contact ILC PLC。通过使用预生成的请求查询 TCP/1962,可以确定 PLC 的身份。响应消息将判断它是否为支持 PC Worx 的 PLC,并引导进一步枚举。
此脚本总共会向 PLC 发送三个数据包,以建立通信,然后向 PLC 请求信息。
此脚本解析的 PC Worx 属性包括:
PLC 类型 - 表示 ILC PLC 类型的字符串。
型号 - 由 ASCII 数字组成的字符串,表示 PLC 的型号,例如 2737193。
固件版本 - 表示 PLC 上运行的固件版本的字符串。
固件日期 - 表示 PLC 上运行的固件构建日期的字符串。
固件时间 - 表示 PLC 上运行的固件构建时间的字符串。
####历史与背景
摘自 Phoenix Contact 产品网页 链接
PC Worx 是 Phoenix Contact 所有控制器的统一工程软件。它将编程(符合 IEC 61131)、现场总线配置和系统诊断整合在同一个软件解决方案中。这实现了硬件与软件之间的最佳交互。PC Worx 可用于实现复杂的自动化概念。根据要支持的 I/O 数量,你可以选择两个版本:PC WORX BASIC 和 PC WORX PRO。
####安装
此脚本需要 Nmap 才能运行。如果你没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html
#####Windows
下载 pcworx-info.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以管理员身份完成。转到“开始 -> 程序 -> 附件”,右键单击“命令提示符”。选择“以管理员身份运行”。
move pcworx-info.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 pcworx-info.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以 sudo/root 身份完成。
sudo mv pcworx-info.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下命令之一,其中 是你希望扫描 Phoenix Contact PLC 的目标地址。
Windows: nmap -p 1962 --script pcworx-info -sV <host>
Linux: nmap -p 1962 --script pcworx-info -sV <host>
####备注
此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/pcworx-info.nse
此脚本使用标准的 PC Worx 目标端口 TCP 1962。
==
###proconos-info.nse ![proconos-info Sample Output] (http://www.digitalbond.com/wp-content/uploads/2015/02/pcworx.png)
####作者
Stephen Hilt
Digital Bond, Inc
####目的与描述
proconos-info.nse 的目的是通过 ProConOS/MultiProg 协议识别和枚举 PLC。通过使用预生成的请求查询 TCP/20547,可以确定 PLC 的身份。响应消息将判断它是否为支持 ProConOS/MultiProg 的 PLC,并引导进一步枚举。
只需一个请求即可从 PLC 查询此信息。
此脚本解析的 ProConOS/MultiProg 属性包括:
梯形逻辑运行时 - 显示运行时名称、版本和构建日期的字符串。
PLC 类型 - 表示 PLC 类型和固件版本的字符串。
项目名称 - 表示当前在 PLC 上运行的项目名称的字符串。
启动项目 - 表示设置为在 PLC 上启动的项目名称的字符串。
项目源代码 - 表示项目源代码是否可用的字符串。
####安装
此脚本需要 Nmap 才能运行。如果你没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html
#####Windows
下载 proconos-info.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以管理员身份完成。转到“开始 -> 程序 -> 附件”,右键单击“命令提示符”。选择“以管理员身份运行”。
move proconos-info.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 proconos-info.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以 sudo/root 身份完成。
sudo mv proconos-info.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下命令之一,其中 是你希望扫描 ProConOS/MultiProg PLC 的目标地址。
Windows: nmap -p 20547 --script proconos-info -sV <host>
Linux: nmap -p 20547 --script proconos-info -sV <host>
####备注
此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/proconos-info.nse
此脚本使用标准的 ProConOS/MultiProg 目标端口 TCP 20547。
==
###s7-enumerate.nse ![s7-enumerate Sample Output] (http://digibond.wpengine.netdna-cdn.com/wp-content/uploads/2014/04/S7screenshot.png)
####作者
Stephen Hilt
Digital Bond, Inc
注意:此脚本旨在提供与 Nmap 内的 PLCScan 相同的功能。PLCScan 收集的某些信息未移植到此 NSE 中,这些信息可以从接收到的数据包中解析出来。
感谢 Positive Research 和 Dmitry Efanov 创建了 PLCScan
####目的与描述
s7-enumerate.nse 的目的是识别和枚举西门子 SIMATIC S7 PLC。通过使用预生成的 COTP 和 S7COMM 消息查询 TCP/102,可以确定 S7 的身份。响应消息将判断它是否为 S7 PLC,并引导进一步枚举。注意:TCP/102 被多种应用程序使用,S7COMM 就是其中之一。
在成功建立 S7 通信后,会发送两个 S7 请求。
这些请求会获取基本硬件、固件信息,以及一些描述性信息,例如工厂标识和系统名称。然后将此信息返回给 Nmap,并以 Nmap 支持的标准输出格式呈现。
此脚本解析的 S7 属性包括:
模块 - 表示正在查询的模块标识的字符串。用于标识 S7 型号,例如 315、412、1200 等。
基本硬件 - 表示正在查询的基本硬件标识的字符串。
版本 - 表示基本硬件版本标识的字符串。
系统名称 - 表示分配给设备的系统名称的字符串。如果资产所有者采用了结构化的命名约定,这可以提供一些有用的情报。
模块类型 - 插入模块的模块类型名称字符串。
序列号 - 模块序列号字符串。这主要用于库存盘点。
版权 - 包含版权信息的字符串。通常显示为“Original Siemens Equipment”(原始西门子设备),但第三方实现的 S7 协议栈也有可能提供其他信息。
工厂标识 - 表示设备上配置的工厂标识的字符串。在我们的扫描中很少看到此字符串,但它可能提供有用的情报。
####历史与背景
摘自维基百科上关于 SIMATIC 的文章 http://simple.wikipedia.org/wiki/SIMATIC:
SIMATIC 是德国西门子公司开发的一种自动化系统的名称。该自动化系统控制用于工业生产的机器。该系统使机器能够自动运行。
####安装
此脚本需要 Nmap 才能运行。如果你没有 Nmap,请根据 Nmap 的说明下载并安装 Nmap。 http://nmap.org/download.html
#####Windows
下载 s7-enumerate.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以管理员身份完成。转到“开始 -> 程序 -> 附件”,右键单击“命令提示符”。选择“以管理员身份运行”。
move s7-enumerate.nse C:\Program Files (x86)\Nmap\scripts
#####Linux
下载 s7-enumerate.nse 后,你需要将其移动到 NSE 脚本目录中,此操作必须以 sudo/root 身份完成。
sudo mv s7-enumerate.nse /usr/share/nmap/scripts
####用法
在终端窗口/命令提示符中,使用以下命令之一,其中 是你希望扫描 S7 PLC 的目标地址。
Windows: nmap -p 102 --script s7-enumerate -sV <host>
Linux: sudo nmap -p 102 --script s7-enumerate -sV <host>
####备注
此脚本的官方版本维护于:https://github.com/digitalbond/Redpoint/s7-enumerate.nse
此脚本使用标准的 S7COMMS 目标端口 TCP 102。