Big Binary Files Upload (PostgreSQL)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
PostgreSQLは、大きなオブジェクトとして知られる構造を提供しており、pg_largeobject
テーブルを介してアクセス可能で、画像やPDF文書などの大きなデータ型を保存するために設計されています。このアプローチは、データをファイルシステムに戻すエクスポートを可能にするため、COPY TO
関数よりも有利です。これにより、元のファイルの正確な複製が維持されます。
このテーブル内に完全なファイルを保存するためには、pg_largeobject
テーブルにオブジェクトを作成し(LOIDで識別される)、次にこのオブジェクトに2KBのサイズのデータチャンクを挿入する必要があります。これらのチャンクは、エクスポート機能が正しく動作するために、正確に2KBのサイズであることが重要です(最後のチャンクは例外となる可能性があります)。
バイナリデータを2KBのチャンクに分割するために、次のコマンドを実行できます:
各ファイルをBase64またはHexにエンコードするには、以下のコマンドを使用できます:
重要: このプロセスを自動化する際は、2KBのクリアテキストバイトのチャンクを送信することを確認してください。16進数エンコードされたファイルはサイズが倍になるため、チャンクごとに4KBのデータが必要です。一方、Base64エンコードされたファイルは、ceil(n / 3) * 4
の式に従います。
大きなオブジェクトの内容は、デバッグ目的で次のコマンドを使用して表示できます:
Using lo_creat
& Base64
バイナリデータを保存するために、最初にLOIDが作成されます:
精密な制御が必要な状況、例えばBlind SQL Injectionを悪用する場合、lo_create
は固定LOIDを指定するために好まれます。
データチャンクは次のように挿入できます:
大きなオブジェクトを使用後にエクスポートし、潜在的に削除するには:
Using lo_import
& Hex
lo_import
関数は、大きなオブジェクトのために LOID を作成し、指定するために利用できます:
オブジェクト作成後、データはページごとに挿入され、各チャンクが2KBを超えないようにします:
プロセスを完了するために、データがエクスポートされ、大きなオブジェクトが削除されます:
大きなオブジェクトにはACL(アクセス制御リスト)がある可能性があり、ユーザーが作成したオブジェクトへのアクセスが制限されることがあります。ただし、許可されたACLを持つ古いオブジェクトは、コンテンツの抽出に対して引き続きアクセス可能である場合があります。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)