利用可靠性测试系统
作者:
安萨里阿什法克

评论者:
等级:
5
四月 1, 2015
上次修改:二月 6, 2017

总结:

利用可靠性测试系统的开发,以确定软件的可靠性利用通过计算EIP = 0x41414141命中数

介绍

 
我的一个朋友与玩“MS13-009” 一 使用后免费 在漏洞 IE浏览器 这导致 远程执行代码.

他让我帮他写一个 可靠的利用 此漏洞.

一旦我开始寻找到漏洞, 我意识到这个漏洞是不可靠的,由于这样的事实,有一个很 自由和使用释放对象之间的小窗口. 更重要的是, 免费只发生时的所有执行 SCRIPT 块得到完成.

由于这个, 我们不得不依靠的JScript的 的setTimeout() 功能重新分配释放的对象.

如, 我的任务是写一个可靠的利用这个漏洞, 这是痛苦的推出 IE浏览器WinDbg中 并记录 EIP 每次寄存器的值.

这种情况让我感到沮丧,我开始想,为什么不写一个小脚本,做这个任务.

利用可靠性测试系统

 
所以, 可靠性通过计数的次数利用数确定是能够控制 EIP 寄存器与所需地址/值.
这一个非常简单的脚本 视窗 以确定有多少一个利用是 可靠. 我已经使用 CDB.EXE 检测碰撞并记录寄存器状态.

源代码

 

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# -*- 编码: UTF-8 -*-
“,”"

 /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
| $$_____ /| $$__ $$|__ __ $$ $$ // __ $$
| $$      | $$  \ $$   | $$  | $$  \__ /
| $$$$$   | $$$$$$$/   | $$  |  $$$$$$
| $$__ / | $$__ $$ | $$   \____ $$
| $$      | $$  \ $$   | $$   /$$  \ $$
| $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
|________ /|__ /|__ / |__ / \______ /


版权 (Ç) 2010-2015 HackSys队

这个文件是漏洞可靠性测试的一部分
系统.

利用可靠性测试系统用于测试
打可靠性EIP = 0x41414141. 该系统
旨在找出多少一个漏洞是可靠的.

请参阅文件'许可'的复制许可.

作者 : 安萨里阿什法克
联系: ashfaq_ansari1989[在]hotmail.com
网站: HTTP://hacksys.vfreaks.com

“,”"


__author__ = “阿什法克安萨里”
__version__ = '1.0'

进口
进口 系统
进口 shutil
进口
进口 穿线


ExploitReliabilityTestingSystem(物体):
    “,”"
    这个类是漏洞可靠性的心脏
    测试系统.
    “,”"


    DEF __init__(, CDB, 登录, 计划, 参数=):
        “,”"
        这是构造ERTS

        :停止CDB: cdb.exe路径
        :参数日志: 日志路径
        :参数项目: 计划推出
        :参数的args: 程序参数
        “,”"

        # 如果CDB验证, 记录和程序存在
        如果 .路径.存在(CDB):
            募集 AttributeError异常(“请验证CDB路径”)
        ELIF .路径.存在(登录):
            尝试:
                .MKDIR(.路径.目录名(登录))
            除了 OSERROR:
                募集 AttributeError异常(“请验证日志路径”)
        ELIF .路径.存在(计划):
            募集 AttributeError异常(“请验证程序路径”)

        .CDB = CDB
        .登录 = 登录
        .计划 = 计划
        .参数 = 参数
        .过程 =

    DEF 运行(, FILE_PATH, 超时=60):
        “,”"
        这用于运行具有超时的处理
        使用线程

        :参数FILE_PATH: 文件路径打开
        :参数超时: 超时秒
        “,”"

        # 验证指定参数和超时参数
        如果 FILE_PATH :
            募集 AttributeError异常(“请验证程序FILEPATH”)
        ELIF 超时 类型(超时) == ST:
            募集 AttributeError异常(“请验证TIMEOUT”)

        DEF __launch_process():
            # 准备过程参数
            process_args = .CDB + '' + “-g -G -o -c" .logopen” + .登录 + \
                           “;ŗ;.logclose;q" "' + .计划 + “" “ + .参数 + \
                           '' + FILE_PATH

            .过程 = .教皇(process_args,
                                            标准输入=.PIPE,
                                            标准输出=.PIPE,
                                            标准错误=.PIPE)
            # 等待进程退出
            .过程.沟通()

        # 准备运行过程中的线程
        process_thread = 穿线.线(目标=__launch_process)

        # 启动线程
        process_thread.开始()

        # 现在加入线程
        process_thread.加入(超时=超时)

        # 检查线程仍然活着
        如果 process_thread.is_alive():
            # 看来,这个过程没有崩溃
            # 让我们杀死进程
            .过程.终止()

            # 让我们终止子线程
            process_thread.加入()

    DEF is_crash_reliable(, EIP):
        “,”"
        这是用来检查坠毁是可靠的
        从崩溃日志检查EIP

        :EIP参数: EIP寄存器的值进行比较
        :返回: TRUE / ​​FALSE
        “,”"

        # 验证EIP作为字符串
        如果 类型(EIP) != ST:
            募集 AttributeError异常(“请验证EIP”)

        登录 = 打开(.登录).阅读()

        如果 “EIP ={0}“.格式(EIP) 登录:
            返回
        其他:
            返回


如果 __name__ == “__main__":
    # 常量
    头 = '''

      /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
     | $$_____ /| $$__ $$|__ __ $$ $$ // __ $$
     | $$      | $$  \ $$   | $$  | $$  \__ /
     | $$$$$   | $$$$$$$/   | $$  |  $$$$$$
     | $$__ / | $$__ $$ | $$   \____ $$
     | $$      | $$  \ $$   | $$   /$$  \ $$
     | $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
     |________ /|__ /|__ / |__ / \______ /

           利用系统的可靠性
                 版本: {0}

    '''
.格式(__version__)

    # 微调这些值
    MAX_RUN = 10
    暂停 = 60
    EIP = “41414141”
    FILE_PATH = “HTTP://本地主机:8000/exploit.html“
    CDB_PATH = 'C:\\程序文件\\Windows调试工具 (x86的)\\cdb.exe“
    PROGRAM_PATH = 'C:\\程序文件\\IE浏览器\\IEXPLORE.EXE“
    PROGRAM_ARGS =
    LOG_PATH = 'C:\\日志\“ + os.path.basename(PROGRAM_PATH) + “.登录

    reliable_crash_count = 0
    可靠性= 0

    # 打印目标详细信息
    打印头
    打印“
目标EIP: {0}“.format(EIP)
    打印“
目标应用程序: {0}“.format(os.path.basename(PROGRAM_PATH))

    # 创建漏洞可靠性的实例
    # TestingSystem类
    厄茨= ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           登录= LOG_PATH,
                                           程序= PROGRAM_PATH,
                                           的args = PROGRAM_ARGS)

    # 运行该应用程序和计数崩溃的数量
    因为我在范围内(0, MAX_RUN):
        # 运行目标应用程序
        erts.run(FILE_PATH = FILE_PATH, 超时= TIMEOUT)

        # 现在检查的崩溃是可靠的
        如果erts.is_crash_reliable(EIP EIP =):
            reliable_crash_count = 1

        # 现在确定利用可靠性
        可靠性= (reliable_crash_count * 100) / MAX_RUN

        # 在屏幕上打印的状态
        sys.stdout.write函数("[{0}] 直播可靠性评级: {1}%" .format(我 + 1, 可靠性))
        sys.stdout.flush()

    # 删除日志目录
    shutil.rmtree(路径= os.path.dirname(LOG_PATH))

    打印“

    打印“
利用可靠性评级: {0}%“.format(可靠性)

 

放弃: 请不要使用这里提供的源代码. 最新版本总可以在下面给出的Github上库中找到.

 

在行动

 

利用可靠性测试系统已完成
利用可靠性测试系统运行

 

利用可靠性测试系统在GitHub上

 


我希望这可能是有用的利用谁想要测试自己的战功的可靠性开发商. 请提出一个问题,如果您发现任何错误,或者如果您有任何改进建议.

12,426 总的看法, 21 今日观点

下面的两个选项卡下面的内容转变.

安萨里阿什法克

安全研究员
阿什法克安萨里是创始人 HackSys队 代号为 "豹". 他是一位安全研究人员在信息安全的各个方面的经验. 他曾撰写 "HackSys极端脆弱的驱动程序" 和 "死亡的shellcode". 他还撰写并出版了低层次软件开发的各种白皮书. 他的核心利益在于 "低水平开发", "逆向工程", "项目分析" 和 "混合起毛". 他是人工智能和机器学习的变形金刚迷. 他是章负责人 空普纳.

阿什法克安萨里的最新文章 (查看全部)

发表评论

您的电子邮件地址不会被公开. 必需字段标记 *