首先当然是吃水不忘挖井人,感谢大表哥的靶场(感谢星期五实验室以及乌鸦安全的靶场维护,由于csdn创作规范,只能匿了)
参考地址 参考地址
然后带上我的人生导师的一句话,正所谓,学而不思则罔,思而不学则殆;只是打一遍靶场那是毫无意义的,所以在下总结了此靶场需要学习的知识点
攻击模型图如下
友情提示:此文章篇幅较长,请大家穿好纸尿裤!!!
- HMI嵌入式的简介
- SCADA数据采集与监控系统简介
- S7协议的简介
- InduSoft Web Studio 嵌入式HMI RCE
- LAquis SCADA CVE-2017-6020 任意文件读取漏洞
- 紫金桥工程管理器 DLL劫持漏洞
- 力控组态软件动态调试获取系统管理员密码
- S7-300 启停攻击
- IDA PRO 的快捷命令介绍
- MSF 流量如何转发 CS流量上线
HMI是Human Machine Interface 的缩写,“人机接口”,也叫人机界面。人机界面(又称用户界面或使用者界面)是系 统和用户之间进行交互和信息交换的媒介,它的作用其实我理解为—以人类可以理解的方式进行运行转换。凡参与人机信息交流的领域都存在着人机界面
换个意思,机器语言只能识别0和1,正常人类也没法搞啊,就拿数控机床来说,如果没有那个嵌入式软件进行互动,人类怎么让他运作?
HMI产品由硬件和软件两部分组成,硬件部分包括处理器、显示单 元、输入单元、通讯接口、数据存贮单元等,其中处理器的性能决定了HMI产品的性能高低,是HMI的核心单元。(可以理解为数控机床的操作员站小电脑)
根据HMI的产品等级不同,处理器可分别选用8位、16位、32位的处理器。HMI软件一般分为两部分,即运行于HMI硬件中的系统软件和运行于PC机Windows操作系统下的画面组态软件(如此次使用的InduSoft Web Studio组态软件)。 在下记得以前上学的时候学的是发那科系统和西门子系统的数控铣床和数控机床,那个时候也有过了解嵌入式软件
嵌入式HMI软件-InduSoft Web Studio 介绍如下:
InduSoft Web Studio法国施耐德电气(Schneider Electric)公司的一个嵌入式HMI软件,该软件 是一个功能强大的自动化整合开发工具,提供所有的自动化建构模组来开发人机介面、SCADA 系統以及嵌入式设备解決方案。
InduSoft 已整合 Web 技术并充分运用了互联网/内联网连结的优势。目前该软件广泛应用于电力、能源等多个自动化工业领域。
这里说一个点,一般情况下,嵌入式软件的端口号默认都是4322哈
首先使用kali攻击机进行存活主机探测以及端口扫描,存活探测就不来了,直接探测一下端口就好
其实这要是实打实的来我指定是G了,因为我看这几个端口是毫无头绪,80端口是访问不通的,1234以及4322端口有没有常见的,上网搜了一下,也没搜到啥玩意 没错,正如你所见,狗屁没有,然后偷窥了一下星期五实验室的wp 嵌入式HMI软件-InduSoft Web Studio
可以看到,直接就拿到了system权限,恰好应证了上文,嵌入式的权限太高了 一顿操作猛如虎啊,那么问题来了,在真正的互动环节,如何去识别这种嵌入式的软件呢,让我们带着疑问,继续学习
执行 ipconfig命令发现此设备存在两个网卡,第二张网卡ip地址如下
查看当前路由,并添加路由表
添加sock代理
此时默认使用1080端口做代理,需要确认本机代理情况
这里的第一个坑,由于kali版本不同,导致有些人是proxychains.conf有些人是proxychains4.conf,请大姐根据实际情况进行修改,若是出现代理配置文件找不到的情况,说明你电脑里有俩配置文件,删掉任意一个就行 返回msf,使用arp -a命令,并没有发现其他有用的网络 使用nmap,nmap拉稀了 使用msf扫
探测到存活的ip 192.168.90.110 使用nmap进行单独探测端口,依然拉稀 改回msf探测
首先为浏览器设置sock5代理
通过访问1234端口,发现页面如下
在科研、生产和日常生活中,对温度、压力、流量、速度、位移等模拟变量 进行测量和控制时,需要通过传感器把上述物理量转换成能够模拟物理量的电信号(即模拟电信号),将模拟电信号经过处理并转换成计算机能识别的数字量(0/1),送入计算机,称之为数据采集。
数据采集是计算机在监测、管理和控制一个系统的过程中,取得原始数据 的主要手段,更是工业互联网调度自动化的基础和核心!
SCADA应用案例简化图 SCADA的主要功能如下
盗张图,别追究我啊,看看工厂MES系统
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加载进去
解读一下 DEPTH 到达基本目录的级别,(也就是有多少个…/),如果安装时未更改路径,默认就是向上跳转10级。如果更改路径漏洞利用不成功,可以根据实际情况调整此参数。 FILE 这是要下载的文件,与上面的DEPTH参数结合组成完整的文件路径。 Proxies 端口[,类型:主机:端口] […]的代理链 RHOSTS 目标主机,范围CIDR标识符或具有语法’file:
上cs
生成监听,此次使用msf上线cs Msf 退出后台后
cs上线成功 需要注意的是,msf使用的payload一定要和cs的一样,是reverse_http,别写成tcp的了!!! 嘿嘿,浏览到了 我踏马直接下载 下载成功后,返回至cs目录,即可查阅 /root/桌面/cs4.4/downloads/ 读取文件,返回msf
定位到该文件保存位置,更改字符编码为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劫持漏洞
这里我们使用到两款工具,分别是procexp.exe以及DllInject.exe;
此二工具是用来做dll进程分析以及进程注入的;工具网上都有,或者大家可以回复公众号,获取下载链接,请自行检测有无后门!
生成dll后门,这里使用正向连接
将dll文件上传至目标机器(吐个槽,其实都能上传了的话,完全可以直接传个其他后门,可能是劫持的漏洞不容易发现,而且就当漏洞复现了吧) Msf正向监听
坑来了,我按照步骤进行dll注入,但是怎么都不上线 我把ws2help.dll文件放在了两个不同的位置,依然是能注入但是不上线
查看端口状态,并没有syn等待请求,说明不是防火墙拦截,但是1003端口以及处于一个监听状态了,说明dll注入是成功的
重启xp系统之后,重新再走了一次dll劫持,这次又上线了…无语事件。所以这里是一个坑,大家如果遇到了请重启计算机,还有就是如果直接上传后门的话,连接之后只是普通用户权限
dll劫持挖掘过程如下: win+r regedit 打开注册表 运行进程监控软件,而后运行紫金桥工程管理器,查看该进程相关dll 将这些dll与注册表内的比较,谁不在注册表里谁就可以被当做dll注入的毒 注册表对比如下:圈出来的就可以用 将生成的ws2help.dll文件上传至紫金桥服务器,而后使用DllInject.exe加载即可达到劫持效果 (DLL注入与劫持有一定的差异,注入是启动前,劫持是启动后) 劫持成功后,观察进程以及端口状态
msf上线
好吧,其实上线了也是普通用户权限的 而后我想直接用msf转CS上线了,但是上线失败了,CS建立监听1005端口,这里监听的ip地址变了,是因为网络环境变了,大家不要在意哈
但是cs并没有上线,可能是因为第二层网络他是不能直接访问的,1005端口也并没有建立监听,证明了我们的猜想 返回cs,建立正向连接 生成正向连接马 将正向连接马上传至192.168.90.110机器上运行(生成dll文件也可以,要是大家生成的exe不能执行,报0x000000007错误,就建个文件夹把马子放进去或者dll劫持上线就可以了)
返回cs选择第一个会话,而后输入命令
connect 192.168.90.110 1006 上线成功 我们返回msf session 3 添加路由表(还记得第二台主机的ipconfig吗)
添加sock代理
存活主机扫描
若是大家出现扫描没反应,请提高线程 set threads 5
我们第二台主机读到过三个机器的密码,我们不知道第三台密码是谁的,所以就连接两次,经过测试,是192.168.95.110的
不知道为什么,第四台主机的密码是这个。。。感觉有点牵强,难道是因为这是管理员站? 提前修改密码,因为我们需要用动态调试找到密码对应的十六进制,但是初始密码是啥谁也不知道,所以我们加上任意的字符串方便我们找对应的十六进制 废了好大的力气,终于是弄明白了ida pro的动态调试,大家一定要记住,要使用管理员打开ida pro,否则是调试不了这个进程的 调试进程 选择指定进程 我们直接按 alt+b 调出搜索,搜索十六进制对应的vlan即可 搜索成功后,双击即可 密码出来了,去掉vlan就是我们需要的密码内容 账号:tegratnluv密码:Vu1Nt@rG3t9Gg 远程连接成功
(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通信中,它其实是客户端的角色。 客户端/服务器模式的数据流动是单向的。也就是说,只有客户端能操作服务器的数据,而服务器不能对客户端的数据进行操作。
先上线再说
将后门直接上传至192.168.95.100而后执行即可
查看全部网络并添加路由表
通过client端(192.168.95.100)端可以看到,S7的服务端正在运行,我们的目的就是要把下位机打停机 其实我觉得可以直接stop
这里我们使用ISF来进行攻击,已知这时S7-300的模拟器,(不,我不知道)ISF中存在这一型号的利用模块可以直接利用,ISF的工程项目: https://github.com/dark-lbp/isf 然后就是,环境编译失败,python脚本怎么也跑不起来 下了一个exploits也没行,拉倒吧
被打停了,达到了启停目的 盗的俩图