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:

預設 postgresql 不會安裝 python 的擴充,在 ubuntu 下可以通過:
進行安裝,除了 python 的擴充,還有 sh、perl、ruby 等等。
安裝完成後,首先是建立一個 udf 來執行我們要執行的指令:
其中的 plpython2u 可以利用如下語句擷取:
我們可以根據傳回來判斷利用哪個語言(plpython2u、plpythonu、plpython3u 等等)。
建立好 udf 後,直接調用如下語句即可:
此外,sh、ruby 等同理,可以參考官方文檔來寫一個 udf。
同樣的,postgresql 可以通過 dns request 一樣擷取資料,在盲注的情況下。
用到的一個擴充叫做 dblink,可以通過如下指令開啟:
接着運作如下語句,擷取目前資料庫使用者名稱:
遠端擷取到請求内容:
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,這樣就可以成功寫入:
老版本的 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>