MySQL File priv to SSRF/RCE
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
これはhttps://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/からのMySQL/MariaDB/Percona技術の要約です。
SQLのアウトオブバンドデータ流出の探索において、LOAD_FILE()
関数はネットワークリクエストを開始するために一般的に使用されます。しかし、この関数は動作するオペレーティングシステムとデータベースの起動設定によって制約されます。
secure_file_priv
グローバル変数が未設定の場合、デフォルトで/var/lib/mysql-files/
に設定され、このディレクトリへのファイルアクセスが制限されます。空の文字列(""
)に設定しない限り、ファイルアクセスはこのディレクトリに制限されます。この調整には、データベースの設定ファイルまたは起動パラメータの変更が必要です。
secure_file_priv
が無効(""
)であり、必要なファイルとfile_priv
権限が付与されていると仮定すると、指定されたディレクトリの外にあるファイルを読み取ることができます。しかし、これらの関数がネットワーク呼び出しを行う能力はオペレーティングシステムに大きく依存します。Windowsシステムでは、UNCパスへのネットワーク呼び出しが可能であり、オペレーティングシステムがUNC命名規則を理解しているため、NTLMv2ハッシュの流出につながる可能性があります。
このSSRF手法はTCPポート445に制限されており、ポート番号の変更は許可されていませんが、フル読み取り権限を持つ共有にアクセスするために使用でき、以前の研究で示されたように、さらなる悪用のためにハッシュを盗むことができます。
MySQLデータベースは、外部ライブラリファイルからユーザー定義関数(UDF)を使用することを提供します。これらのライブラリが特定のディレクトリ内またはシステムの$PATH
にアクセス可能であれば、MySQL内から呼び出すことができます。
この技術は、@@plugin_dir
への書き込みアクセス、file_priv
がY
に設定され、secure_file_priv
が無効であることなど、いくつかの条件が満たされている場合に、UDFを介してネットワーク/HTTPリクエストを実行することを可能にします。
例えば、lib_mysqludf_sys
ライブラリやHTTPリクエストを可能にする他のUDFライブラリをロードしてSSRFを実行できます。ライブラリはサーバーに転送する必要があり、ライブラリの内容を16進数またはbase64エンコードして適切なディレクトリに書き込むことで実現できます。
@@plugin_dir
が書き込み可能でない場合、特にMySQLのバージョンがv5.0.67
を超える場合、代替の書き込み可能なパスを使用する必要があります。
これらのプロセスの自動化は、UDFインジェクションをサポートするSQLMapなどのツールによって促進され、盲目的なSQLインジェクションの場合は、出力リダイレクションやDNSリクエストスモグリング技術が利用されることがあります。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)