MySQL File priv to SSRF/RCE

HackTricksをサポートする

これはhttps://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/からのMySQL/MariaDB/Percona技術の要約です。

SQL関数を介したサーバーサイドリクエストフォージェリ(SSRF)

SQLのアウトオブバンドデータ流出の探索において、LOAD_FILE()関数はネットワークリクエストを開始するために一般的に使用されます。しかし、この関数は動作するオペレーティングシステムとデータベースの起動設定によって制約されます。

secure_file_privグローバル変数が未設定の場合、デフォルトで/var/lib/mysql-files/に設定され、このディレクトリへのファイルアクセスが制限されます。空の文字列("")に設定しない限り、ファイルアクセスはこのディレクトリに制限されます。この調整には、データベースの設定ファイルまたは起動パラメータの変更が必要です。

secure_file_privが無効("")であり、必要なファイルとfile_priv権限が付与されていると仮定すると、指定されたディレクトリの外にあるファイルを読み取ることができます。しかし、これらの関数がネットワーク呼び出しを行う能力はオペレーティングシステムに大きく依存します。Windowsシステムでは、UNCパスへのネットワーク呼び出しが可能であり、オペレーティングシステムがUNC命名規則を理解しているため、NTLMv2ハッシュの流出につながる可能性があります。

このSSRF手法はTCPポート445に制限されており、ポート番号の変更は許可されていませんが、フル読み取り権限を持つ共有にアクセスするために使用でき、以前の研究で示されたように、さらなる悪用のためにハッシュを盗むことができます。

ユーザー定義関数(UDF)を介したリモートコード実行(RCE)

MySQLデータベースは、外部ライブラリファイルからユーザー定義関数(UDF)を使用することを提供します。これらのライブラリが特定のディレクトリ内またはシステムの$PATHにアクセス可能であれば、MySQL内から呼び出すことができます。

この技術は、@@plugin_dirへの書き込みアクセス、file_privYに設定され、secure_file_privが無効であることなど、いくつかの条件が満たされている場合に、UDFを介してネットワーク/HTTPリクエストを実行することを可能にします。

例えば、lib_mysqludf_sysライブラリやHTTPリクエストを可能にする他のUDFライブラリをロードしてSSRFを実行できます。ライブラリはサーバーに転送する必要があり、ライブラリの内容を16進数またはbase64エンコードして適切なディレクトリに書き込むことで実現できます。

@@plugin_dirが書き込み可能でない場合、特にMySQLのバージョンがv5.0.67を超える場合、代替の書き込み可能なパスを使用する必要があります。

これらのプロセスの自動化は、UDFインジェクションをサポートするSQLMapなどのツールによって促進され、盲目的なSQLインジェクションの場合は、出力リダイレクションやDNSリクエストスモグリング技術が利用されることがあります。

HackTricksをサポートする

Last updated