基于Yakit平台开发IRTeam插件exploit 西门子PLC

作者:@剑思庭师傅

Yakit&IRTeam

Yakit是基于yak语言开发的网络安全单兵工具,旨在打造一个覆盖渗透测试全流程的网络安全工具库。受限于Yak使用形式,用户必须学习 Yak 语言并同时具备对安全的一定理解。为了让 Yak 本身的安全能力更容易被大家接受和使用,为Yak编写了gRPC服务器,并使用这个服务器构建了一个客户端:Yakit,通过界面化GUI的形式。

IRTeam作为国内一支工业安全红队,主要致力于PLC/DCS工业控制系统的脆弱性研究和攻击链打造,此次受360漏洞云与Yakit联手活动邀请,针对Yakit单兵工具尝试把IRTeam现有成果中一款针对西门子S7-200 SMART的Payload移植到Yakit工具上。

系统结构和参数

1、一台西门子PLC(S7-200 SMART) IP:192.168.2.10/24

2、一台TPLINK二层交换机

3、一台安装Yakit的PC(Windows 10)IP:192.168.2.110/24

安装过程:

https://www.yaklang.io/products/quickstart

评测过程

PLC探测

1、进入Yakit工具后,选择“基础安全工具”中的“扫描端口/指纹”

2、在指纹IP扫描目标中填入被扫描PLC的IP,此评测中我直接输入PLC的IP。

3、在“扫描端口”里填入常用PLC开放的端口,例如 80/102/443/3389 等。

4、然后点击开始扫描。

可以看到上图192.168.2.10这个设备上端口的状态,只有102端口开放,其余都是关闭的。如果是多个IP地址,还可以在扫描结果页面直观看到所有资产开放的端口号。如下图:

但在工控指纹这部分,并没有集成ICS的NSE,也希望Yakit在指纹部分开放用自己挂载的NSE脚本,方便某些特殊领域的资产识别。

从上图也可以看到端口102开放,西门子的PLC常用端口是102,所以可以初步确定PLC的厂商。

开发IRTeam插件

进入插件仓库,移植一个西门子PLC的Payload到Yakit工具插件上,因为Yakit插件支持Yak语言(近似Golang语言),所以简单看了一下语法和API和参数声明和调用,都是比较简单的,另外对于TCP库封装可以说近乎疯狂的地步。

Yak模块名:IRTeam (这个是我们团队的名字,同时代表工业控制的意思)

描述:就是针对西门子S7-200 SMART此款PLC的运行和停止控制

参数:IP 就是PLC的IP地址(字符串类型),PORT就是PLC开放服务端口(INT类型),CMD就是你exploit时候的发出控制PLC命令(BOOL类型,TRUE就是运行,FALSE就是停止)

源码部分实现起来也是十分简单,首先通过cli.string等操作获取参数里的内容,然后通过TCP.connect连接PLC并且打开102端口,然后就是先发送2个西门子PLC自有的TASP握手包建立session,然后在判断CMD的数值后发送运行或者停止的Payload。具体结构见下图:

经过Yak源代码Payload编写后,选择保存插件。返回到插件仓库可以看到一个YAK的插件,上面写着IRTeam和这个插件的描述,在模块详情中还可以看到作者的名字以及关键字。

同时在参数上,修改为真实PLC的IP/端口和命令,然后选择“开始执行”,就可以看到西门子PLC的状态会根据你下发的控制命令而改变。如下图:

PoC视频:(查看完整视频教程可以点击链接阅读原文:

https://mp.weixin.qq.com/s/4UDP

Yak官方资源

Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值