質問

私は遭遇しました このPythonスクリプト これはサーバーの HeartBleed 脆弱性をテストします。

誰かが「こんにちは」の内容、何を送信しているのか、そしてこのコンテンツがどのように構築されているのかを説明できますか?

このスクリプトを悪意を持って使用しようとしているわけではありません。Tomcat 7.0.2 サーバーの脆弱性をテストするように依頼されました。tcnative-1.dll が openssl 1.0.1d を使用していることを確認しましたが、サーバーをテストしようとしたいくつかのスタンドアロン テスト ツールでは、脆弱ではないと報告されました。

役に立ちましたか?

解決

hello そして hb より読みやすい形式でバイト文字列を定義します。

h2bin(x) 関数はすべての作業を行います。

def h2bin(x):
    return x.replace(' ', '').replace('\n', '').decode('hex')

したがって、16 進数の文字列からすべての空白が削除され、16 進数からバイトにデコードされます。

>>> '16 03 02 00 dc'.replace(' ', '')
'16030200dc'
>>> '16 03 02 00 '.replace(' ', '').decode('hex')
'\x16\x03\x02\x00\xdc'

これは、16 進表記と追加の空白を使用して一連のバイトを指定するためのコンパクトな方法です。

16 進データ自体は通常の ハートビートプロトコルメッセージ, 、生のバイトで。の hello 文字列に含まれる TLS 1.1 レコードメッセージ, 、最初のバイト (16 16 進数、10 進数 22) をハンドシェイク レコードとして送信し、 client_hello (6バイト目は 01)。これは、TLS セッションをセットアップし、クライアントがサポートする暗号の種類をサーバーに伝えるだけです。これに何が含まれているかは、クライアントがハートビート拡張機能 ( 00 0f メッセージの最後にあるバイトペア)。

それは hb メッセージ それは本当に興味深いことです:

hb = h2bin(''' 
18 03 02 00 03
01 40 00
''')

18 ハートビート コンテンツ タイプ レコードです。 03 02 TLS 1.1 プロトコルのバージョンを識別します。の 00 03 メッセージのペイロードの大きさを示します。3 バイト、または 2 行目のすべて。

メッセージ自体の 3 バイトはハートビート タイプ (01, 、または「リクエスト」)、およびメッセージの長さ (40 00, 、16384 バイト)、続いて 実際のメッセージはありません. 。これにより、破損した SSL サーバーが 16kb のメモリを含むハートビート応答を送り返すことになります。存在しない長さ 0 のリクエスト メッセージに、リクエストの長さを補うためのメモリが追加されてエコーされます。

他のヒント

このページそのページそのほどのことを説明しました。

const unsigned char good_data_2[] = {
    // TLS record
    0x16, // Content Type: Handshake
    0x03, 0x01, // Version: TLS 1.0
    0x00, 0x6c, // Length (use for bounds checking)
        // Handshake
        0x01, // Handshake Type: Client Hello
        0x00, 0x00, 0x68, // Length (use for bounds checking)
        0x03, 0x03, // Version: TLS 1.2
        // Random (32 bytes fixed length)
        0xb6, 0xb2, 0x6a, 0xfb, 0x55, 0x5e, 0x03, 0xd5,
        0x65, 0xa3, 0x6a, 0xf0, 0x5e, 0xa5, 0x43, 0x02,
        0x93, 0xb9, 0x59, 0xa7, 0x54, 0xc3, 0xdd, 0x78,
        0x57, 0x58, 0x34, 0xc5, 0x82, 0xfd, 0x53, 0xd1,
        0x00, // Session ID Length (skip past this much)
        0x00, 0x04, // Cipher Suites Length (skip past this much)
            0x00, 0x01, // NULL-MD5
            0x00, 0xff, // RENEGOTIATION INFO SCSV
        0x01, // Compression Methods Length (skip past this much)
            0x00, // NULL
        0x00, 0x3b, // Extensions Length (use for bounds checking)
            // Extension
            0x00, 0x00, // Extension Type: Server Name (check extension type)
            0x00, 0x0e, // Length (use for bounds checking)
            0x00, 0x0c, // Server Name Indication Length
                0x00, // Server Name Type: host_name (check server name type)
                0x00, 0x09, // Length (length of your data)
                // "localhost" (data your after)
                0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74,
            // Extension
            0x00, 0x0d, // Extension Type: Signature Algorithms (check extension type)
            0x00, 0x20, // Length (skip past since this is the wrong extension)
            // Data
            0x00, 0x1e, 0x06, 0x01, 0x06, 0x02, 0x06, 0x03,
            0x05, 0x01, 0x05, 0x02, 0x05, 0x03, 0x04, 0x01,
            0x04, 0x02, 0x04, 0x03, 0x03, 0x01, 0x03, 0x02,
            0x03, 0x03, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03,
            // Extension
            0x00, 0x0f, // Extension Type: Heart Beat (check extension type)
            0x00, 0x01, // Length (skip past since this is the wrong extension)
            0x01 // Mode: Peer allows to send requests
};
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top