天天看點

Hacking PostgreSQL

digoal

2016-10-18

postgresql , sql注入 , ssrf , postgresql , hacking

本文為基于轉載的加工文章,原文位址

<a href="http://www.cnblogs.com/yinxinghan/p/hacking_postgresql.html">http://www.cnblogs.com/yinxinghan/p/hacking_postgresql.html</a>

這篇文章主要講解了如何 hacking postgresql 資料庫,總結了一些常用方法。

大體上和 mysql 差不多,有一些變量不一樣。

具體就不再舉例,可以看這篇總結:postgresql sql injection cheat sheet。

此外,利用 sqlmap 也是一個不錯的方式。

sqlmap 給出的幾個 udf 在我本地測試并不成功,是以最好的方法是自己編譯一個動态連結庫。

根據官方文檔,我們要定義一個 pg_module_magic。

大概是 postgresql 的安全機制,在 8.2 以後需要驗證這個 magic block,不然,在加在動态連結庫的時候會報錯:

執行系統指令的動态連結庫源碼為:

利用如下指令編譯 .so 檔案:

在 pgsql 裡執行:

監聽的 9999 端口得到一個 shell:

Hacking PostgreSQL

預設 postgresql 不會安裝 python 的擴充,在 ubuntu 下可以通過:

進行安裝,除了 python 的擴充,還有 sh、perl、ruby 等等。

安裝完成後,首先是建立一個 udf 來執行我們要執行的指令:

其中的 plpython2u 可以利用如下語句擷取:

我們可以根據傳回來判斷利用哪個語言(plpython2u、plpythonu、plpython3u 等等)。

Hacking PostgreSQL

建立好 udf 後,直接調用如下語句即可:

Hacking PostgreSQL

此外,sh、ruby 等同理,可以參考官方文檔來寫一個 udf。

同樣的,postgresql 可以通過 dns request 一樣擷取資料,在盲注的情況下。

用到的一個擴充叫做 dblink,可以通過如下指令開啟:

接着運作如下語句,擷取目前資料庫使用者名稱:

Hacking PostgreSQL

遠端擷取到請求内容:

Hacking PostgreSQL

postgresql 讀取檔案雖然有些蛋疼,但是還是可以讀取的:

讀取結束後:

新版本則可以直接通過函數或者使用大對象操作接口來讀取。

寫檔案分為兩個部分,一個是寫 webshell,另外一個是寫二進制檔案。

寫 webshell 十分簡單,利用:

即可寫一個檔案。

根據瘋狗的這一篇文章:

<a href="http://zone.wooyun.org/content/4971">http://zone.wooyun.org/content/4971</a>

,說是可以利用postgresql 的“大對象資料”來寫,但是我測試是失敗的。報錯如下:

用 copy 語句,format 為 binary 的情況下來寫檔案的話,會被 postgresql 加上幾個位元組,導緻不能識别為 elf 檔案。

實際上,閱讀官方文檔可知,寫的檔案每一頁不能超過 2kb,是以我們要把資料分段:

其中每一段都要小于等于 2kb,這樣就可以成功寫入:

Hacking PostgreSQL

老版本的 postgresql 存在 xxe 漏洞。

具體可以看這篇文章:postgresql (all) error-based xxe 0day。

大體就是執行語句:

可以擷取一些資料,也可以進行 ssrf 等。

不過因為年代很久,可能很多都修複過了,是以作為一個保留方案,可能會有意外的驚喜。

1. postgresql sql injection cheat sheet

<a href="http://pentestmonkey.net/cheat-sheet/sql-injection/postgres-sql-injection-cheat-sheet">http://pentestmonkey.net/cheat-sheet/sql-injection/postgres-sql-injection-cheat-sheet</a>

2. 關于postgresql的那些事兒(檔案讀取寫入、指令執行的辦法)

3. postgresql 9.0 documentation

<a href="http://www.postgresql.org/docs/9.0/">http://www.postgresql.org/docs/9.0/</a>

4. postgresql (all) error-based xxe 0day

<a href="http://lab.onsec.ru/2012/06/postgresql-all-error-based-xxe-0day.html">http://lab.onsec.ru/2012/06/postgresql-all-error-based-xxe-0day.html</a>

5. hack 雲服務 pdf

<a href="https://github.com/digoal/blog/blob/master/201610/20161018_02_pdf_001.pdf">pdf</a>

<a href="http://info.flagcounter.com/h9v1">count</a>