MySQL File priv to SSRF/RCE
これはhttps://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/からのMySQL/MariaDB/Perconaテクニックの要約です。
SQL関数を使用したサーバーサイドリクエストフォージェリ(SSRF)
SQL Out of Bandデータの外部流出を探索する中で、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_priv
がY
に設定されていること、およびsecure_file_priv
が無効であることなど、いくつかの条件が満たされる場合に、UDFを介してネットワーク/HTTPリクエストを実行できます。
たとえば、lib_mysqludf_sys
ライブラリや他のHTTPリクエストを可能にするUDFライブラリをロードしてSSRFを実行できます。ライブラリはサーバーに転送する必要があり、これはライブラリの内容を16進数またはBase64エンコードして適切なディレクトリに書き込むことで達成できます。
@@plugin_dir
が書き込み可能でない場合、特にv5.0.67
以上のMySQLバージョンの場合、プロセスは異なります。このような場合は、書き込み可能な代替パスを使用する必要があります。
これらのプロセスの自動化は、UDFインジェクションをサポートするSQLMapなどのツールによって容易に行うことができ、盲目的なSQLインジェクションの場合、出力リダイレクションやDNSリクエストスマグリング技術を利用することができます。
Last updated