はじめに
この実験では、Linux システム上の機密性の高い設定ファイルを見つけ、それを悪用して特権を root に昇格させる方法を学びます。目的は、Web サービスの設定ファイルやユーザー関連の設定ファイルを深く理解し、それらを特権昇格に利用する方法を習得することです。Web の脆弱性を通じて、すでに www-data ユーザーのような低特権のシェルを取得していると仮定し、root へのアクセスを昇格させる手法を探ります。
Web サービス設定ファイルの調査
Web サービスの設定ファイルには、データベースの資格情報などの機密情報が含まれている場合があります。管理者がパスワードを再利用している場合、これらの情報を特権昇格に利用することができます。
まず、ターミナルを開き、
/home/labex/projectディレクトリに移動します。cd /home/labex/project実験環境を初期化しましょう。
./env_setup_1.sh初期化が完了すると、
www-dataユーザーとして操作を行います。これは、Web の脆弱性を通じて取得した低特権のシェルをシミュレートしています。Linux 上の Web サービスは通常、
/var/wwwディレクトリに保存されています。以下のファイルに注目する必要があります。database.phpuser.php*.configconfig.php
次のコマンドを使用して、これらのファイルを検索することができます。
find /var/www -type f \( -iname "user.php" -o -iname "database.php" -o -iname "config.php" -o -iname "*.config" \) 2> /dev/null期待される出力:
/var/www/wordpress/wp-admin/includes/user.php /var/www/wordpress/wp-includes/user.php /var/www/wordpress/wp-content/plugins/akismet/views/config.phpさらに、ターゲットシステムがコンテンツ管理システム (CMS) を使用している場合、その特定の CMS のデフォルトのデータベース接続ファイルの場所を検索することができます。
この実験環境では、サーバーは WordPress CMS を使用しています。検索すると、WordPress のデータベース設定が
/var/www/wordpress/wp-config.phpファイルに保存されていることがわかります。more /var/www/wordpress/wp-config.phpこのファイルには、MySQL の root アカウントの資格情報が含まれています。
/** MySQL database username */ define( 'DB_USER', 'root' ); /** MySQL database password */ define( 'DB_PASSWORD', 'cD8M2M8fMiDHu4m1' );管理者がパスワードを再利用している可能性を考慮して、このパスワードを使用してシステムの root ユーザーとしてログインを試みることができます。
su -残念ながら、このパスワードは root ユーザーには適用されません。
次に、MySQL データベースにログインし、さらに情報を検索することができます。
mysql -u root -p -h 127.0.0.1wp-config.phpファイルから取得したパスワードを入力します。cD8M2M8fMiDHu4m1MySQL データベース内で、以下のコマンドを実行して、さらに情報を収集することができます。
利用可能なデータベースを確認します。
show databases;ROBデータベースを選択します。use ROB;ROBデータベース内のテーブルを一覧表示します。show tables;rob_userテーブルを選択します。select * from rob_user;データベースから、さらに 2 組の資格情報を取得します。
root:CMPc5MoAGf alice:psoj9apv4uMySQL データベースから抜けます。
exitパスワード
CMPc5MoAGfを使用して root ユーザーとしてログインを試みることができます。su -データベースから取得したパスワードを入力します。
CMPc5MoAGf今回は、root アクセスを正常に取得できました!
特権昇格が成功したことを証明するために、
/rootディレクトリにproof.txtという名前のファイルを作成します。echo "Success" > /root/proof.txtファイルが作成されたことを確認します。
ls /root/proof.txt
このステップでは、Web サービスの設定ファイル内の機密情報を見つけ、それを利用して特権を昇格させる方法を学びました。核心的な考え方は、サーバー上の認証資格情報を検索し、パスワードの再利用の可能性を利用して特権を昇格させることです。
ユーザー関連の設定ファイルの調査
このステップでは、機密情報を含む可能性のあるユーザー関連の設定ファイルに焦点を当てます。
前のステップの後、あなたはまだ root シェルでいるかもしれません。このステップでは、以下のコマンドを実行して labex ユーザーに切り替えます。
su - labex
まず、
/home/labex/projectディレクトリに移動します。cd /home/labex/project実験環境を初期化しましょう。
./env_setup_2.sh初期化が完了すると、
user001ユーザーとして操作を行います。調査する主なユーザー関連の設定ファイルは以下の 2 つです。
~/.bash_profile: 環境変数や起動プログラムの設定に使用されます。このファイルはユーザーがログインするときに実行されます。~/.bash_history: 各ユーザーのホームディレクトリにあるファイルで、ユーザーのシェルコマンド履歴を記録します。通常は最後の 1000 個のコマンドが保存されます(一部の Linux ディストリビューションではこの機能が無効になっている場合があります)。
まず、
~/.bash_profileファイルを確認しましょう。cat ~/.bash_profile期待される出力:
cat: /home/user001/.bash_profile: No such file or directoryこの場合、
user001ユーザーは~/.bash_profileファイルを使用していないようです。次に、
~/.bash_historyファイルを確認しましょう。cat ~/.bash_historyここで、履歴に記録されたコマンドが見つかります。
... echo user001:09FMWNFS7n | chpasswd ...このコマンドは、
user001ユーザーのパスワードが09FMWNFS7nに変更されたことを示しています。このパスワードを使用して、特権を昇格させることを試みることができます。
sudo whoamiそして、
~/.bash_historyファイルから見つけたパスワードを入力します。09FMWNFS7nパスワードが正しく、
sudo特権でコマンドを実行することができます。root シェルを取得するには、以下のコマンドを使用することができます。
sudo /bin/bash -pユーザーのコマンド履歴からの情報を利用して、正常に root シェルを取得しました。
最後に、
/rootディレクトリにsuccess.txtという名前のファイルを作成して、実験を完了させます。echo "Congratulations" | sudo tee /root/success.txt
まとめ
この実験では、Linux システム上で Web サービスの設定ファイルやユーザー関連の設定ファイル内の機密情報を見つけ、それを利用して特権を昇格させる方法を学びました。データベース接続ファイル、ユーザーのコマンド履歴、その他の設定ファイルなど、認証資格情報を含む可能性のあるファイルを検索する手法を探りました。パスワードの再利用の可能性を利用することで、root アクセスを取得することができました。
重要なポイントは、システム上に保存されている機密情報を常に探し続けることです。これは、特権昇格につながる可能性があるためです。この実験では特定の種類のファイルに焦点を当てましたが、特権昇格の目的で悪用される可能性のあるファイルや情報を常に探し続ける姿勢を持つことが重要です。