一、 框架介绍

本框架主要使用Python语言开发,通过集成ShadowBroker释放的NSA工具Fuzzbunch攻击框架,开发一款适合工控漏洞利用的框架。由于Fuzzbunch攻击框架仅适用于Python2.6,很多核心的功能都封装成了DLL,通过函数进行调用,不便于后期的移植和使用。但是,Fuzzbunch的命令行使用的确很方便,而且够傻瓜,所以就有集成一个适合工控漏洞利用的框架想法。新框架对主要的接口使用Python重新实现,所以支持Python2.X版本。

肯定会有人问,有牛逼的MSF,搞这个玩竟儿有什么用?主要基于如下几点考虑

  • MSF命令行使用不够傻瓜,纯属个人观点,仅供参考。
  • 工控的很多私用协议都使用Python开发,有很多优秀的Python框架(如scapy、kitty),集成在MSF很麻烦,有一个Python的框架会方便很多。
  • 最主要的一个原因是,从事工控安全以来,本人一直在使用Python,很多脚本都是基于Python开发的,想将手上所有的资源进行整合,提供一个统一的平台,方便。

二、 框架使用

进入目录,执行如下命令:

python main.py

界面显示如下:

D:\isf\isf>python main.py

                               ???
???????????????
????? ?????
???? ????
???? ????
??? ???
??? ?? ???
??? ???????? ???
??? ??????????? ???
??? ????????????? ???
?? ??????????????? ??
?? ????????????????? ??
?? ?????? ????? ??
?? ??????????? ??
?? ??????????? ??
?? ????????? ??
??? ??????? ???
??? ????? ???
??? ??????????? ???
??? ????????????????? ???
??? ???????????????????? ???
?????????????????????????????
???????????????????????????
?????????????????????
---ICSMASTER--- + - - - - - + [ Version 1.1.1 ] + - - - - - +
+ - - - - - + [ MADE BY ICSMASTER. HTTP://ICSMASTER.COM ] + - - - - - + [*] Loading Plugins
[*] Initializing isf v1.1.1
[*] Adding Global Variables
[+] Set ResourcesDir =>. c:\isf\Resources
[+] Set Color =>. True
[+] Set ShowHiddenParameters =>. False
[+] Set NetworkTimeout =>. 60
[+] Set LogDir =>. D:\isf\isf\logs
[*] Autorun ON Exploit Autorun List
==================== 0) apply
1) touch all
2) prompt confirm
3) execute Payload Autorun List
==================== 0) apply
1) prompt confirm
2) execute [+] Set ISFStorage =>. D:\isf\isf\storage
isf >

show命令使用,显示当前所有的插件,如下所示

isf > show

Plugin Categories
================= Category Active Plugin
-------- -------------
Exploit None
Payload None isf > show Exploit Plugin Category: Exploit
======================== Name Version
---- -------
Schneider_CPU_Command 1.1.0
Siemens_300_400_CPU_Control 1.1.0

use命令使用,调用相关插件,并根据命令行提示配置参数,如下所示

isf > use Schneider_CPU_Command

[!] Entering Plugin Context :: Schneider_CPU_Command
[*] Applying Global Variables [*] Applying Session Parameters
[*] Running Exploit Touches [!] Enter Prompt Mode :: Schneider_CPU_Command Module: Schneider_CPU_Command
============================= Name Value
---- -----
TargetIp
TargetPort 502
Command stop [!] plugin variables are valid
[?] Prompt For Variable Settings? [Yes] : [*] TargetIp :: Target IP Address [?] TargetIp [] : 192.168.1.30
[+] Set TargetIp => 192.168.1.30 [*] TargetPort :: Target Port [?] TargetPort [502] :
[+] Set TargetPort => 502 [*] Command :: The control command of cpu [stop/start] [?] Command [stop] :
[+] Set Command => stop [!] Preparing to Execute Schneider_CPU_Command Module: Schneider_CPU_Command
============================= Name Value
---- -----
TargetIp 192.168.1.30
TargetPort 502
Command stop [?] Execute Plugin? [Yes] :
[*] Executing Plugin
logging to file
[+] Schneider_CPU_Command Succeeded

三、 EXP编写

编写一个EXP需要包含两个文件,一个参数描述性的文件 .xml 和 一个漏洞脚本文件 .py,两个文件的名字需要相同,xml定义输入输出的参数的基本信息,如下所示,EXP需要三个参数,分别是TargetIp、TargetPort、Command。注意:XML文件中 name 字段不能重复。

<?xml version="1.0"?>
<t:config id="c72514379eaad943b62f4080a5ae1dc61619f0f3"
name="Schneider_CPU_Command"
version="1.1.0"
configversion="1.1.0.0"
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns:t='tc0'> <t:inputparameters>
<t:parameter name="TargetIp"
description="Target IP Address"
type="IPv4"/>
<t:parameter name="TargetPort"
description="Target Port"
type="TcpPort"
default="502"/>
<t:parameter name="Command"
description="The control command of cpu [stop/start]"
type="String"
default="stop"/>
</t:inputparameters>
</t:config>

漏洞利用脚本编写方法如下,如果不清楚可以直接拷贝如下模板进行修改

1、继承基础类 BaseExploit 2、填写POC基础信息 pocinfo 3、注册命令行,向register_options变量增加make_option对象即可,注意参数名称需要与xml文件保持一致 4、实现exploit函数

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python
# coding=utf-8
from core.exploit import * class MyPoc(BaseExploit):
pocinfo = {
'ID': 'ICF-2017-000001',
'Name': '施耐德昆腾140系列PLC CPU控制',
'Author': 'w3h',
'Create_Date': '2017-04-09',
'Description': '''施耐德昆腾140系列PLC认证用户时Session使用是单比特,导致攻击者可以向PLC发送CPU控制指令。''', 'Vendor': VENDOR.SI,
'Device': ['Schneider Quantum 140'],
'App': '',
'Protocol': 'modbus',
'References': {'CVE': '', 'CNVD': '', 'OSVDB': '', 'CNNVD': ''}, 'Risk': RISK.H, # H/M/L
'VulType': VULTYPE.REP
} register_options = [
make_option('--TargetIp', action='store', dest='TargetIp',
type='string', default=None, help='The target of this poc.'),
make_option('--TargetPort', action='store', dest='TargetPort',
type='int', default=502, help='The port of this poc [default:502].'),
make_option('--Command', help='The constrol commond of cpu', dest="Command", default="stop"),
] def exploit(self, *args, **kwargs):
cmd = self.getParam("Command")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((self.TargetIp, self.TargetPort))
pass # POC标准入口函数
MainEntry(MyPoc, __name__)

工控漏洞利用框架 - ISF(Industrial Security Framework)的更多相关文章

  1. 自动化移动安全渗透测试框架:Mobile Security Framework

    自动化移动安全渗透测试框架:Mobile Security Framework 译/Sphinx  测试开发社区  7月3日 Mobile Security Framework (移动安全框架) 是一 ...

  2. 工控安全入门(七)—— plc的网络

    上一篇我们详细分析了bootram和Vxworks的基本启动流程,这篇文章中我们把视线转到plc的网络部分,同时来复现我们第一个.第二个工控安全漏洞. VxWorks的网络设备驱动 一般我们说有三种设 ...

  3. 7. Vulnerability exploitation tools (漏洞利用工具 11个)

    Metasploit于2004年发布时,将风暴带入了安全世界.它是开发,测试和使用漏洞利用代码的高级开源平台. 可以将有效载荷,编码器,无操作生成器和漏洞利用的可扩展模型集成在一起,使得Metaspl ...

  4. Nmap从探测到漏洞利用备忘录 – Nmap简介(一)

    在侦查期间,扫描一直是信息收集的初始阶段. 什么是侦查 侦查是尽可能多收集关于目标网络的信息.从黑客的角度来看,信息收集对于一次攻击非常有用,所以为了封锁恶意的企图,渗透测试者通常尽力查找这些信息,发 ...

  5. 工控随笔_09_西门子_S7-200 Smart与V20 USS通信USS_RPM_R利用轮询的方式通讯异常

    前两天处理过一个故障,是S7-200 Smart与V20的USS通讯,设备厂家在程序里面利 用USS_RPM _R程序循环轮询5个V20设备读取频率和电流值等信息. 图 USS_RPM_R读取信息 上 ...

  6. 工控随笔_07_西门子_WinCC利用命令行实现操作log日志

    在WinCC中可以通过报警纪录来实现操作员纪录,这个需要WinCC的消息系统进行组态和配置. 利用消息系统进行实现上诉功能不但复杂而且时间久啦也不方便查询.那么有没有一种简单的方法来 实现操作员纪录呢 ...

  7. 工控随笔_02_西门子_WinCC的IO域利用C脚本返回值

    WinCC的输入输出域用来显示信息或者接受操作人员的输入.当作为显示功能时,只有直接的变量连接 才能正常的显示,如果使用动态对话框进行设置且用了表达式则不能正确显示. 但是有时候我们在WinCC变量管 ...

  8. Kali Linux渗透基础知识整理(三):漏洞利用

    漏洞利用阶段利用已获得的信息和各种攻击手段实施渗透.网络应用程序漏洞诊断项目的加密通信漏洞诊断是必须执行的.顾名思义,利用漏洞,达到攻击的目的. Metasploit Framework rdeskt ...

  9. 工控安全入门之Ethernet/IP

    这一篇依然是协议层面的,协议层面会翻译三篇,下一篇是电力系统中用的比较多的DNP3.这一篇中大部分引用的资料都可以访问到,只有一篇reversemode.com上的writeup(http://rev ...

随机推荐

  1. 用pyhton配置LVS_DR模式

    import paramiko vip = '192.168.42.250' ds = '192.168.42.8' rs1 = '192.168.42.9' rs2 = '192.168.42.10 ...

  2. docker命令小结

    文档:docker命令小结.note链接:http://note.youdao.com/noteshare?id=54015b76db9ae764182cb921e348b7fc&sub=DD ...

  3. DevOps - DevOps工具链

    不要满足于使用世界上已存在的各种方法和技术,而应重点放在希望达到的效果上! 单单使用工具不难,困难的是在团队开发中熟练使用,并形成一套理想的工作流程,只有在团队中工具和思想才能发挥最大价值. 开源工具 ...

  4. Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)

    Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...

  5. 今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个

    /* 题目描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球 ...

  6. freeRTOS学习8-22

    互斥量的优先级继承机制可以减少优先级翻转问题,通过将持有锁的任务的优先级提升到当前任务中优先级任务最高的任务. #define KEY1_EVENT (0x01 << 0) #define ...

  7. 前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输

    HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...

  8. sshpass和做软链接

    参考: https://help.aliyun.com/document_detail/54530.html?spm=5176.11065259.1996646101.searchclickresul ...

  9. 算法flink

    和Yarn-Cluster模式不同,Session模式的资源在启动Yarn-Session时候就已经启动了,后续提交的作业全都在已申请的资源空间内运行,比较适合小而多的作业 # 启动yarn-sess ...

  10. SQLite基础-4.数据定义语言(DDL)

    目录 一.创建数据库 1. 创建方式 2. 数据库命名规范 二. 创建表 1. 基本用法 2. 数据表命名规范 3. 字段命名规范 三. 删除表 一.创建数据库 1. 创建方式 在第二章中我们讲了如何 ...