0

Python の scapy を使用して、TCP 接続をハイジャックするスクリプトを作成しました。

いくつかの VM (サーバー - xp_sp3、クライアント - xp_sp1) 間の接続に対する攻撃をテストすると、クライアント ポートが見つかり、次にサーバーの SND.NEXT が見つかり、それを使用してクライアント SND.NEXT が見つかりました (それらすべてを Wireshark と比較しました)。そしてそれらは合法です)。

クライアントからサーバーにスプーフィングされたパケットを送信すると、クライアントの SND.NEXT を使用して、パケットがサーバーに到達するが、NetCat (宛先) には到達しないことがわかります。さらに、それを実際のクライアント パケットと比較すると、ほとんど同じように見えます (異なる mac、ttl、window-size など)。

私が行ったことのほかに、サーバーに対してパケットが正当に見えるようにするために私がしなければならないことは他にありますか?

4

1 に答える 1

1

まず、Wireshark を使用して、スプーフィングされたパケットの TCP チェックサムが正しいことを確認します。スプーフィングされたパケットに無効な TCP チェックサムがある場合、それらは受信者によって破棄されます。Wireshark でこの機能をオンにするには: [編集] > [設定] > [プロトコル] > [TCP] > [可能であれば TCP チェックサムを検証します]

シーケンス番号に加えて、 TCP タイムスタンプ値を正しく操作していることも確認してください。シーケンス番号が正しいが、TCP タイムスタンプ オプションが古い場合、受信者は依然としてパケットをドロップします。

これは、TCP タイムスタンプをインクリメントする関数です。うまくいくかもしれません。

def inc_timestamp(packet, TSval_inc, TSecr_inc):
    if packet.haslayer(TCP):
        for i, option in enumerate(packet[TCP].options): # Timestamp option format: tuple(name, tuple(time1, time2))    
            if str(option[0]) == "Timestamp":            # Ex. ('Timestamp', (7797613, 414050))]            
                packet[TCP].options[i] = option[0], (option[1][0]+TSval_inc,option[1][1]+TSecr_inc)

これらのパケットを Scapy で最初から作成している場合、デフォルトでは Scapy TCP() レイヤーに含まれていないため、TCP タイムスタンプ オプション フィールドを追加する必要がある場合があります。いずれにせよ、上記のコードは、これを行うために必要なフォーマット情報を提供するはずです。

于 2012-05-18T14:17:35.500 に答える