ICMP Shell の検証(復習編)

セキュリティミニキャンプ in 沖縄 で ICMP Shell を使った実習があったので復習です。

ICMP Shell とは

ICMP を使って、telnet的なことを行おうというもの。

リモートホスト側でデーモンモードの ICMP Shell が動作し、ICMP ヘッダの id がローカルホストとリモートホストで指定したものと一致した場合、ローカルホストから送られてきたデータを"/bin/sh"にパイプするみたいです。そしてその結果をローカルホストの標準出力に出力するということ。

デフォルトでは、ICMP タイプ 0(ICMP エコーリプライ)を使用してやりとりするようです。

環境

VirtualBox 上の VM 2 台を使って、検証を行いました。

トポロジ的には以下の様な感じです。

      client                                server
vm1(192.168.56.101) ----------------- vm2(192.168.56.102)

使い方

ICMP Shell の書式は以下の様な感じ。

#サーバー側
./ishd [options]
#クライアント側
./ish [options] <remote-host>

以下のオプションを使って指定する値はクライアント/サーバー両方で一致する必要があります。

#ID(0 ~ 65535)
-i <id>
#パケットサイズ
-p <packetsize>

主なオプションは以下です。

#デバッグモードでサーバーを動作
-d
#使用する ICMP タイプを指定
-t <type>
#結果をリモートホストでも標準出力
-h

検証1

#vm2(192.168.56.102)
./ishd -i 65535 -t 0 -p 1024
#vm1(192.168.56.101)
./ish -i 65535 -t 0 -p 1024 192.168.56.102

vm1 で tcmpdump を動作させキャプチャもしました。

結果

ifconfigを実行

f:id:ryouta768:20131228005910p:plain

キャプチャした結果

f:id:ryouta768:20131228005607p:plain

*接続時に id コマンドを実行するみたい
*replyでのやりとり
*id は指定したものになっている(ここでは65535=0xffff)
*コマンドに対する結果を格納した reply のシーケンス番号は 0 以外
    +結果を返すたびにインクリメントされている
*結果は ICMP のデータ部分に格納

ちなみに、 seq=X/Y の表示の X部分は big endian 表示、Y部分は little endian 表示らしいです。

参考にしたページ

ICMP Shell