您当前的位置:首页 > 计算机 > 安全防护

工控攻防演示——从外网到内网控制系统设备的入侵

时间:06-17来源:安全客作者:点击数:

给实验室写的文章,在安全客上发表,在这里再发下

一、概述

  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请求响应中的Sequencenumber字段为4,代表创建的对象引用ID为4,后续修改强制表的时候会用到该ID。

在这里插入图片描述

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

在这里插入图片描述

然后右键点击停止强制,发送了Delete job 请求,也就是删除了该强制表对象其中的 Jobreference 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-300PLC。其主要目的是供各位针对工控安全感兴趣的爱好者学习,相互交流。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门