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 oferuje strukturę znaną jako large objects, dostępną za pośrednictwem tabeli pg_largeobject
, zaprojektowaną do przechowywania dużych typów danych, takich jak obrazy czy dokumenty PDF. To podejście jest korzystniejsze niż funkcja COPY TO
, ponieważ umożliwia eksport danych z powrotem do systemu plików, zapewniając dokładną replikę oryginalnego pliku.
Aby przechować pełny plik w tej tabeli, należy utworzyć obiekt w tabeli pg_largeobject
(identyfikowany przez LOID), a następnie wprowadzić fragmenty danych, każdy o rozmiarze 2KB, do tego obiektu. Ważne jest, aby te fragmenty miały dokładnie 2KB (z możliwym wyjątkiem ostatniego fragmentu), aby zapewnić prawidłowe działanie funkcji eksportu.
Aby podzielić swoje dane binarne na fragmenty 2KB, można wykonać następujące polecenia:
Aby zakodować każdy plik w Base64 lub Hex, można użyć poniższych poleceń:
Ważne: Podczas automatyzacji tego procesu upewnij się, że wysyłasz kawałki 2KB czystych bajtów. Pliki zakodowane w hex będą wymagały 4KB danych na kawałek z powodu podwojenia rozmiaru, podczas gdy pliki zakodowane w Base64 stosują wzór ceil(n / 3) * 4
.
Zawartość dużych obiektów można przeglądać w celach debugowania za pomocą:
Używanie lo_creat
i Base64
Aby przechować dane binarne, najpierw tworzony jest LOID:
W sytuacjach wymagających precyzyjnej kontroli, takich jak wykorzystanie Blind SQL Injection, lo_create
jest preferowane do określenia stałego LOID.
Dane mogą być następnie wstawiane w następujący sposób:
Aby wyeksportować i potencjalnie usunąć duży obiekt po użyciu:
Używanie lo_import
i Hex
Funkcja lo_import
może być wykorzystana do tworzenia i określania LOID dla dużego obiektu:
Po utworzeniu obiektu dane są wstawiane na stronę, zapewniając, że każdy kawałek nie przekracza 2KB:
Aby zakończyć proces, dane są eksportowane, a duży obiekt jest usuwany:
Zauważono, że duże obiekty mogą mieć ACL (Listy Kontroli Dostępu), co może ograniczać dostęp nawet do obiektów stworzonych przez twojego użytkownika. Jednak starsze obiekty z liberalnymi ACL mogą być nadal dostępne do eksfiltracji treści.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)