信頼性試験システムを利用する
筆者:
Ashfaqアンサリ

によるレビュー:
評価:
5
上の 4月 1, 2015
最終更新日:2月 6, 2017

要約:

エクスプロイトの信頼性試験システムは、EIP = 0x41414141のヒット数を計算することにより利用するソフトウェアの信頼性を決定するために開発されています

はじめに

 
私の友人のうちの1つは、「で遊んでいましたMS13-009” A フリー後に使用 の脆弱性 インターネットエクスプローラ これにつながる リモートでコードが実行される.

彼は書面で彼を助けるために私に尋ねた 信頼性の高いエクスプロイト この脆弱性のために.

私は、脆弱性を検討し始めたら, 私は、この脆弱性が原因であり、非常にあるという事実に信頼性がないことに気づいた 自由と解放されたオブジェクトの使用の間に小さなウィンドウ. さらに重要なことには, 無料でのみ起こったときに、すべての実行 SCRIPT ブロックが完成した取得.

このために, 私たちは、JScriptの者に頼らなければならなかった のsetTimeout() 解放されたオブジェクトを再割り当てする機能.

として, 私のタスクは、信頼できるが、この脆弱性の悪用書くことでした, それは打ち上げに苦痛だった インターネットエクスプローラ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 -*-
"""

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


著作権 (C言語) 2010-2015 HackSysチーム

このファイルには、信頼性試験エクスプロイトの一部である
システム.

信頼性試験システムをテストするために使用されエクスプロイト
EIP = 0x41414141を打つの信頼性. このシステム
エクスプロイトどのくらいの発見を目指していることは信頼性がある.

許可をコピーするためのファイル 'LICENSE'を参照してください.

筆者 : Ashfaqアンサリ
コンタクト: ashfaq_ansari1989[に]hotmail.com
ウェブサイト: HTTP://hacksys.vfreaks.com

"""


__author__ = 「Ashfaqアンサリ '
__VERSION__ = '1.0'

インポート
インポート SYS
インポート shutil
インポート サブプロセス
インポート ねじ切り


クラス ExploitReliabilityTestingSystem(オブジェクト):
    """
    このクラスは、エクスプロイトの信頼性の心臓部です
    検査システム.
    """


    DEF __init__(自己, CDB, ログ, プログラム, 引数=''):
        """
        これはERTSのコンストラクタです

        :CDBを停止: cdb.exeパス
        :PARAMログ: パスを記録
        :PARAMプログラム: プログラムが起動します
        :のparam引数: プログラム引数
        """

        # CDBかどうかを検証, ログインして、プログラムが存在する
        もし しない .パス.存在する(CDB):
            上げる はAttributeError(「CDBパスを有効にしてください」)
        elifの しない .パス.存在する(ログ):
            試す:
                .します。mkdir(.パス.dirnameは(ログ))
            除く OSERROR:
                上げる はAttributeError(「ログのパスを有効にしてください」)
        elifの しない .パス.存在する(プログラム):
            上げる はAttributeError(「プログラムのパスを有効にしてください」)

        自己.CDB = CDB
        自己.ログ = ログ
        自己.プログラム = プログラム
        自己.引数 = 引数
        自己.プロセス = なし

    DEF 実行(自己, FILE_PATH, タイムアウト=60):
        """
        これは、タイムアウトでプロセスを実行するために使用されている
        スレッドを使用して

        :のparam FILE_PATH: オープンするファイルのパス
        :PARAMのタイムアウト: 秒単位のタイムアウト
        """

        # 引数とタイムアウトパラメータを検証
        もし FILE_PATH です なし:
            上げる はAttributeError('プログラムのファイルパスを有効にしてください」)
        elifの タイムアウト です なし タイプ(タイムアウト) == ST:
            上げる はAttributeError(「TIMEOUTを有効にしてください」)

        DEF __launch_process():
            # プロセス引数を準備する
            process_args = 自己.CDB + '' + 「-g -G -o -c&QUOT。.logopen」 + 自己.ログ + \
                           ';R;.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 PARAM: 比較するためのEIPレジスタ値
        :復帰: 真/偽
        """

        # 文字列としてEIPを検証
        もし タイプ(EIP) != ST:
            上げる はAttributeError(「EIPを有効にしてください」)

        ログ = 開く(自己.ログ).読む()

        もし 「EIP ={0}'.フォーマット(EIP) ログ:
            復帰
        ほかに:
            復帰


もし __name__ == "__main__":
    # 定数
    HEADER = '' '

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

           信頼性のシステムを利用する
                 バージョン: {0}

    '' '
.フォーマット(__VERSION__)

    # 微調整これらの値
    MAX_RUN = 10
    タイムアウト = 60
    EIP = 「41414141」
    FILE_PATH = 'HTTP://ローカルホスト:8000/exploit.html」
    CDB_PATH = 'C:\\プログラムファイル\\Windows用デバッグツール (x86の)\\cdb.exe」
    program_pathの = 'C:\\プログラムファイル\\インターネットエクスプローラ\\iexplore.exeを "
    PROGRAM_ARGS = ''
    LOG_PATH = 'C:\\ログ\' + os.path.basename(program_pathの) + '.ログ'

    reliable_crash_count = 0
    信頼性= 0

    # 印刷対象の詳細
    印刷HEADER
    印刷」
ターゲットEIP: {0}「.format(EIP)
    印刷」
ターゲットアプリケーション: {0}\N「.format(os.path.basename(program_pathの))

    # エクスプロイトの信頼性のインスタンスを作成
    # TestingSystemクラス
    Ertsの= ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           ログイン= LOG_PATH,
                                           プログラム= program_pathの,
                                           引数= 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("\R[{0}] ライブの信頼性評価: {1}%&QUOT、.format(私 + 1, 信頼性))
        sys.stdout.flush()

    # ログディレクトリを削除
    shutil.rmtree(パス= os.path.dirname(LOG_PATH))

    印刷」
\N'
    印刷」
信頼性評価を利用する: {0}%「.format(信頼性)

 

免責事項: ここで提供されるソースコードを使用しないでください. 最新バージョンは、常に以下のGitHubのリポジトリで見つけることができます.

 

アクションでは、

 

信頼性試験システムが完成したエクスプロイト
信頼性試験システムを実行したエクスプロイト

 

GitHubの上での信頼性試験システムを利用する

 


私はこれが彼らのエクスプロイトの信頼性をテストしたい開発者が利用するために有用である可能性がある願っています. あなたはどんなバグを見つけた場合に問題を提起したり、任意の改善提案があればしてください.

12,435 閲覧, 30 今日の閲覧回数

以下の2つのタブが、以下の内容を変更する.

Ashfaqアンサリ

セキュリティー研究者
Ashfaqアンサリはの創設者であり、 HackSysチーム コー​​ドネーム "ヒョウ属". 彼は、情報セキュリティの様々な側面での経験を持つセキュリティ研究者である. 彼が執筆しています "HackSysエクストリーム脆弱ドライバ" と "死のシェルコード". 彼はまた、書かれており、低レベルのソフトウェア開発のさまざまなホワイトペーパーを公開しています. 彼のコアの関心が内にあり "低レベルの搾取", "リバースエンジニアリング", "プログラム解析" と "ハイブリッドファジング". 彼は人工知能と機械学習のミーハーです. 彼はのための章リードです ヌルプネ.

返信を残す

あなたのメールアドレスは公開されません. 必須フィールドがマークされている *