ping の ICMP パケットを自作する

セキュリティミニキャンプ in 沖縄 に参加してきたので、キャンプ中に時間がなくて出来なかったことを自分でやってみます。

まずは1日目の 講義で出来なかった、 ICMP パケットの作成。

トポロジ

192.168.56.101 ----------- 192.168.56.102

どっちも VirtualBox 上の VM 。OS は BackTrack5RC3 。

キャプチャ

実際に .101 から .102 に ping を飛ばしてパケットをキャプチャしてみます。

ここでは、 .101 上で Wireshark を動かしてパケットをキャプチャしました。

ping -c 1 192.168.56.102

送信パケット

*送信元 IP
    *192.168.56.101
*宛先 IP
    *192.168.56.102
*タイプ
    * 8
*コード
    * 0
*パケット長
    * 98バイト

受信パケット

*送信元 IP
    *192.168.56.102
*宛先 IP
    *192.168.56.101
*タイプ
    * 0
*コード
    * 0
*パケット長
    * 98バイト

ICMP Echo request のデータ部分には以下のようなデータが入っていました。

f:id:ryouta768:20131223213955p:plain

パケット生成

hping2 を使って ICMP パケットを生成し、 .102 に送信して、.101上でパケットをキャプチャします。

#使用したコマンド
hping2 192.168.56.102 -c 1 -1 -C 8 -K 0

オプションの解説

#送信するパケット数
-c <count>
# ICMP モード(デフォルト)
-1(--icmp)
# ICMP タイプ指定
-C(--icmptype) <type>
# ICMP コード指定
-K(--icmpcode) <code>

送信パケットは以下のようになりました。

*送信元 IP
    *192.168.56.101
*宛先 IP
    *192.168.56.102
*タイプ
    * 8
*コード
    * 0
*パケット長
    * 42バイト

そして、 .102 からの受信パケットは以下の様に。

*送信元 IP
    *192.168.56.102
*宛先 IP
    *192.168.56.101
*タイプ
    * 0
*コード
    * 0
*パケット長
    * 60バイト

送信受信パケットどちらにも、データ部分はありませんでした。-e オプションを使うとデータも送信出来たけれど。

結果

hping2 を使用しても正常に ICMP を送信出来ました。

ただパケット長が ping と hping2 で違ったのは、 ping はデフォルトで何かデータを入れて送信しているため、パケット長が大きいよう。また、 hping2 を使用してパケットを送信した時に、 送信パケット長が42バイトであるのに対して、受信パケット長が60バイトなのは、Wireshark がキャプチャするタイミングによって、 Ethernet のパディングデータをパケット長に含めないからみたいです。

参考ページ

Ethernetのフレーム構造を理解しよう