FreeBuf|工控渗透框架:PLC密码检测( 二 )


FreeBuf|工控渗透框架:PLC密码检测
文章图片
FreeBuf|工控渗透框架:PLC密码检测
文章图片
是不是很简单 , 如果还想验证其它密码保护级别 , 可以通过上面的上步骤重新修改PLC的密码保护级别 , 然后再通过ISF中的s7_200_password_check模块进行验证 。 说到这个模块仔细的同学应该已经发现 , 上一篇文章里提到的从github中clone的ISF项目里没有s7_200_password_check模块啊 , 你这个模块是哪里来的?
如上面细心网友发现的那样 , github中的ISF项目确实没有今天要讲的这个模块 , 这也就是我们为什么要开发这个框架的原因 , 它是一套攻击框架 , 大家可以根据自己对PLC的研究成果 , 添加不同的功能模块 , 最后将所有的攻击模块都集成到这个框架中 , 我们就可以拥有一个强大的工控攻击工具 。
接下来我们就通过上面的案例讲解一下 , 如何给ISF添加一个PLC密码检测模块 , Iet’sgo!
首先 , 你需要在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-8importsocketimporttimefromcore.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.TargetIpself.default_port=int(self.TargetPort)ifself.default_port!=102:returnFalsetry: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=https://pcff.toutiao.jxnews.com.cn/p/20200719/sock.recv(1024)pp="0300001902f08032010000662100080000f0000001000101e0".decode("hex")data=https://pcff.toutiao.jxnews.com.cn/p/20200719/sock.recv(1024)time.sleep(0.1)pp="0300001f02f080320100000004000e00000401120a100200020000030005d0".decode("hex")data=https://pcff.toutiao.jxnews.com.cn/p/20200719/sock.recv(1024)data2=data.encode("hex")str_tmp=data2[-1:]printdata2ifstr_tmp=='1':print"完全读取!"returnTrueelifstr_tmp=='2':print("只读!")returnFalseelifstr_tmp=='3':print('最低权限!')returnFalseelifstr_tmp=='4':print("不允许上传!")returnFalseelse:print("异常状态!")returnFalseexceptExceptionase:printe,"执行错误"returnFalseMainEntry(Check_passwd,__name__)代码解释:
import:三个导入自然不用说了
Check_passwd:构建模块时 , 一定要使用类 , 而不是函数 , 其次一定要继承BaseExploit
exploit:这个方法就是在ISF中配置完各种参数后 , 用于执行扫描或攻击的方法


推荐阅读