Big Binary Files Upload (PostgreSQL)
PostgreSQL Large Objects
PostgreSQL bietet eine Struktur namens Large Objects, die über die Tabelle pg_largeobject
zugänglich ist und zum Speichern großer Datentypen wie Bilder oder PDF-Dokumente entwickelt wurde. Dieser Ansatz ist vorteilhaft gegenüber der Funktion COPY TO
, da er die Exportierung von Daten zurück auf das Dateisystem ermöglicht und eine exakte Kopie der Originaldatei gewährleistet.
Um eine komplette Datei in dieser Tabelle zu speichern, muss ein Objekt in der Tabelle pg_largeobject
erstellt werden (identifiziert durch eine LOID), gefolgt von der Einfügung von Datenblöcken, die jeweils 2 KB groß sind, in dieses Objekt. Es ist entscheidend, dass diese Blöcke genau 2 KB groß sind (mit möglicher Ausnahme des letzten Blocks), um sicherzustellen, dass die Exportfunktion korrekt funktioniert.
Um Ihre Binärdaten in 2 KB große Blöcke aufzuteilen, können die folgenden Befehle ausgeführt werden:
Um jede Datei in Base64 oder Hex zu kodieren, können die folgenden Befehle verwendet werden:
Wichtig: Bei der Automatisierung dieses Prozesses stellen Sie sicher, dass Sie Chunks von 2 KB Klartext-Bytes senden. Hex-codierte Dateien erfordern 4 KB Daten pro Chunk aufgrund der Verdoppelung der Größe, während Base64-codierte Dateien der Formel ceil(n / 3) * 4
folgen.
Der Inhalt der großen Objekte kann zu Debugging-Zwecken mit folgendem Befehl angezeigt werden:
Verwendung von lo_creat
& Base64
Um binäre Daten zu speichern, wird zuerst eine LOID erstellt:
In Situationen, die eine präzise Kontrolle erfordern, wie z.B. bei der Ausnutzung einer Blind SQL Injection, wird lo_create
bevorzugt, um eine feste LOID festzulegen.
Datenblöcke können dann wie folgt eingefügt werden:
Um das große Objekt zu exportieren und möglicherweise nach der Verwendung zu löschen:
Verwendung von lo_import
& Hex
Die Funktion lo_import
kann verwendet werden, um ein LOID für ein großes Objekt zu erstellen und anzugeben:
Nach der Erstellung des Objekts werden Daten pro Seite eingefügt, wobei darauf geachtet wird, dass jeder Chunk nicht mehr als 2 KB überschreitet:
Um den Vorgang abzuschließen, wird die Daten exportiert und das große Objekt gelöscht:
Einschränkungen
Es ist zu beachten, dass große Objekte möglicherweise ACLs (Access Control Lists) haben, die den Zugriff auch auf von Ihrem Benutzer erstellte Objekte einschränken können. Ältere Objekte mit großzügigen ACLs können jedoch immer noch für die Exfiltration von Inhalten zugänglich sein.
Last updated