天天看点

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>