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>