工控攻防演示-从外网到内网设备的入侵

本文通过一个工控靶场实验,详细演示了从外网利用web漏洞进入内网,进而控制西门子S7-300 PLC的过程。涉及Web渗透、内网代理、永恒之蓝漏洞利用、PLC远程启停及重放攻击等技术,揭示了工控系统的安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

·

一、 概述

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
在这里插入图片描述
访问本地Ip的8080 端口,链接为http://192.168.14.4:8080 可访问nps管理后台,输入admin/123 登录。点击添加客户端
在这里插入图片描述
然后在msf中上传linux_amd64_client.tar.gz客户端到内网linux主机的/tmp/目录中。
在这里插入图片描述
回到nps后台中,展开客户端,复制客户端命令
在这里插入图片描述
在msf meterpreter 中执行下面命令让客户端连上服务器
在这里插入图片描述
在后台管理处看到客户端状态是在线即成功连上nps服务器。
在这里插入图片描述
接着在后台管理处添加一个socks代理,输入刚才创建的客户端id,端口为1086
在这里插入图片描述
此时可以通过本地的1086端口的socks代理访问192.168.90.0 网段的主机。在msf中输入下面命令设置socks代理。
在这里插入图片描述

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)进行编程控制的软件。
先下载该项目到本地,使用下面命令下载
在这里插入图片描述

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攻击机上,方便访问

在这里插入图片描述
使用 nmap扫描本地102端口,发现已经转发成功了
在这里插入图片描述
接着在kali 攻击机上下载攻击工具,里面包含了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。其主要目的是供各位针对工控安全感兴趣的爱好者学习,相互交流。

备注:首发在安全客
链接:https://www.anquanke.com/post/id/248647

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值