FreeBuf|工控渗透框架:PLC密码检测
上一篇《信息收集篇》中我们讲了如何使用ISF框架发现工控设备 , 那么有些小伙伴就会问了 , 发现工控设备之后能做些什么呢?答案是很多 , 比如:查看设备有没有密码保护?有密码保护能不能破解?破解后都能做些什么等等问题 。 为了让大家循序渐进地学会工控相关的安全攻防 , 我们需要先学习一些工控的相关知识 。 本篇我们就来讲讲与暴力破解相关的基础知识 , 为后续暴力破解做好准备 。
首先 , 为了能让工业机器相对“智能” , 就需要一个可以控制这些机器的设备来控制它 , 而这个设备应该具备通用性和可复用性 , 这就是PLC类设备 。 一个通用的 , 可重复改写的逻辑控制设备 。 人们可以通过编写一些程序下载到PLC中 , 然后PLC通过读取这些程序以达到“智能”控制的效果 。
好了 , 大家都知道PLC的基本功能后 , 那么就会有一个永恒的问题 , 一般有用的东西就会涉及到安全问题 , 既然你能通过编写程序让PLC控制设备 , 那么就会有别有用心的人也想控制它 , 所以 , 这里就涉及到PLC的保护机制 。 PLC的保护机制和我们常用的手段一样 , 就是通过设置密码进行保护 。
了解完这些基本知识之后 , 让我们来看一下PLC是怎么进行密码设置的 , 设置后是怎么保护PLC的 。 还是和以前一样 , 我们通过工控实验箱来演示 , 实验箱实物图如下:
本文插图
本文插图
注:实验箱中各设备的功能与连线这里就不多介绍了 , 不知道的同学可以看上篇文章 。
实验箱通电后 , 用一根网线将电脑与实验箱进行互联 , 然后就可以使用“STEP 7-MicroWIN SMART”配置PLC , 以及编程软件下载 , 编写程序等操作 。 (不同厂家和不同型号的PLC需要不同的控制软件 , 我们的PLC型号是SMART200)
本文插图
点击“PLC”—“查找CPU” , 扫描到一台PLC设备(为什么是扫描的是CPU而不是扫描PLC呢?请自行百度)
本文插图
通过扫描识别到PLC后 , 点击“确定”该软件就与plc成功连接 , 当前界面就是PLC编程界面 。
本文插图
双击“CPU ST20”打开“系统块”设置页面 , 在“安全”标签中密码设置选项中就可以设置密码了 , 密码保护一共分为4个级别 , S7?200 SMART CPU 的默认密码级别是“完全权限”(1 级) , :
- 完全权限(1 级):提供无限制访问CPU所有功能 。
- 读取权限(2级):用户可以不受限制地读取和写入CPU数据和上传程序 。
下载程序、强制存储器位置或对存储卡进行编程时需要密码 。 - 最低权限(3级):
上传或下载程序、强制存储器位置或对存储卡进行编程时需要密码 。 - 不允许上传(4 级):该级别的密码保护将阻止程序上传(即使输入正确的密码) 。
该选项不允许项目比较 。
其它CPU功能的保护方式与最低权限密码相同 。
分页标题
本文插图
废话不多说 , 直接上图:
本文插图
本文插图
是不是很简单 , 如果还想验证其它密码保护级别 , 可以通过上面的上步骤重新修改PLC的密码保护级别 , 然后再通过ISF中的s7_200_password_check模块进行验证 。 说到这个模块仔细的同学应该已经发现 , 上一篇文章里提到的从github中clone的ISF项目里没有s7_200_password_check模块啊 , 你这个模块是哪里来的?
如上面细心网友发现的那样 , github中的ISF项目确实没有今天要讲的这个模块 , 这也就是我们为什么要开发这个框架的原因 , 它是一套攻击框架 , 大家可以根据自己对PLC的研究成果 , 添加不同的功能模块 , 最后将所有的攻击模块都集成到这个框架中 , 我们就可以拥有一个强大的工控攻击工具 。
接下来我们就通过上面的案例讲解一下 , 如何给ISF添加一个PLC密码检测模块 , Iet’s go!
首先 , 你需要在ISF的module目录(例:/home/one/soft/isf/module/exploits/Siemens)下创建两个文件 , 名字任意(例:s7_200_password_check.py , s7_200_password_check.xml)
xml文件
<t:configid="7f1a1992802517842c14ddfd1a2e3a6b"
name="s7_200_password_check"
version="1.1.0"
configversion="1.1.0.0"
author="one"
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
代码解释: id:可以是这个模块名称的md5值 , 也可以复制我当前这个值 , 然后随变改几个字符即可
name:这里的name就是ISF框架use时的模块名称 , 也是py文件的名称
TargetIp和TargetPort:是你这个模块需要的参数
py文件xml文件是用来配置py文件的参数 , 以及关联ISF框架的 , 而真正完成扫描或攻击功能的模块是在py里面编写的 , 下面我们来看s7_200_password_check.py模块是如何编写的 。
#encoding:utf-8
importsocket
importtime
fromcore.exploitimport*
classCheck_passwd(BaseExploit):
register_info = {
'ID':'ICF-2020-F0010009',
'Name':'s7-200检查',
'Author':'one',
'License': ISF_LICENSE,
'Create_Date':'2020-06-04',
'Description':'''可以显示密码状态''',
}
register_options = [
mkopt_rport(102)
]
defexploit(self,*args,**kwargs):
self.ip = self.TargetIp
self.default_port = int(self.TargetPort)
ifself.default_port !=102:
returnFalse
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((self.ip, self.default_port))
pp ="0300001611e00000000100c0010ac1020100c2020101".decode("hex")
sock.send(str(pp))
data = http://news.hoteastday.com/a/sock.recv(1024)
pp ="0300001902f08032010000662100080000f0000001000101e0".decode("hex")
data = http://news.hoteastday.com/a/sock.recv(1024)
time.sleep(0.1)
pp ="0300001f02f080320100000004000e00000401120a100200020000030005d0".decode("hex")
data = http://news.hoteastday.com/a/sock.recv(1024)分页标题
data2 = data.encode("hex")
str_tmp = data2[-1:]
printdata2
ifstr_tmp =='1':
print"完全读取!"
returnTrue
elifstr_tmp =='2':
print("只读!")
returnFalse
elifstr_tmp =='3':
print('最低权限!')
returnFalse
elifstr_tmp =='4':
print("不允许上传!")
returnFalse
else:
print("异常状态!")
returnFalse
exceptExceptionase:
printe,"执行错误"
returnFalse
MainEntry(Check_passwd, __name__)
代码解释: import:三个导入自然不用说了
Check_passwd:构建模块时 , 一定要使用类 , 而不是函数 , 其次一定要继承BaseExploit
exploit:这个方法就是在ISF中配置完各种参数后 , 用于执行扫描或攻击的方法
pp:这里发送的数据大家先不用关心 , 后续文章会慢慢教大家怎么解析PLC协议
str_tmp:用sock发送完3组数据 , 并接收返回值后 , 取出最后一位进行判断 , 看到这里大家应该就能明白上面4种密码保护级别的1234是什么意思了吧
MainEntry:是将ISF框架接收到的参数发送给当前类 , 然后将检测结果显示出来
好了今天的内容就讲到这里 , 是不是很简单 , 有没有想继续学下去的冲动 , 那就关注我们 , 一步一步用实例为你打开另一扇门 。
精彩推荐
本文插图
【FreeBuf|工控渗透框架:PLC密码检测】
- FreeBuf|“黑球”攻击仍在行动:从检测杀软到安装挖矿
- 渗透破坏|伊朗输油管道突然爆炸,美以盯上基础设施,俄表态愿紧急出兵增援
- FreeBuf|管中窥豹之工控设备解密
- 动力电池软包动力电池|2020动力电池行业市场发展趋势前景分析 软包电池渗透率超过70%
- 应用|工控机与普通电脑的区别及其未来发展趋势
- 电影|《厨子戏子痞子》:喜剧效果一下子渗透到整个画面中,让人记忆犹新
- 移动网络|5G时代,运营商还能再靠“价格战”提升5G用户渗透率吗?
- 砍柴网|木链科技构建”三位一体安全体系“,护航工控安全
- 互联网|第四期携手立思辰——“工控安全风险解析”圆满举办
- 装机量|国轩高科上半年业绩降九成 外资电池渗透行业格局生变