1.了解什么是盲注
盲注(Blind SQL Injection)是SQL注入的一種形式,攻擊者無法直接通過頁面回顯或錯誤信息獲取數據,而是通過觀察頁面的布爾狀態(真/假)或時間延遲來間接推斷數據庫信息。例如,通過構造條件語句,根據頁面是否加載成功或響應時間差異,逐字符猜測數據內容。
2.什么是時間/布爾盲注
時間盲注:通過時間延遲判斷注入條件是否為真。攻擊者根據頁面響應時間的長短,推斷數據庫信息。
函數:SLEEP(seconds)
布爾盲注:通過頁面布爾狀態(真/假)的差異推斷數據。例如:頁面內容、HTTP狀態碼或錯誤消息的變化。
函數:
字符截取:SUBSTRING(str, pos, len) LEFT(str, len)
長度判斷:LENGTH(str)
邏輯:=, >, <, LIKE
3.時間盲注會用到哪些函數
sleep(N)函數:即如果寫入到數據庫被執行了,sleep(N)可以讓此語句運行N秒鐘
if()函數:if(a,b,c),如果a的值為true,則返回b的值,如果a的值為false,則返回c的值
4.布爾盲注會用到哪些函數
字符串截取: SUBSTRING(str, pos, len)、MID()、LEFT()。
字符轉ASCII: ASCII(char)。
長度判斷: LENGTH(str)、CHAR_LENGTH()。
邏輯判斷: LIKE、=, >, <。
5.時間盲注的數據庫代碼通常長什么樣子
SELECT IF(1=1, SLEEP(5), 0); -- 條件為真時觸發延遲
6.如何構造時間盲注
- 觸發條件判斷:通過IF或CASE語句綁定條件。
- 引入延遲函數:如SLEEP(5)。
- 逐字符推斷:通過二分法或遍歷猜測字符。
7.如何構造布爾盲注
- 構造真/假條件:如' AND 1=1 -- (真)、' AND 1=2 -- (假)。
- 觀察頁面差異:如內容顯示、HTTP狀態碼、錯誤消息等。
- 逐字符判斷:通過比較ASCII值縮小范圍。
8.什么情況下會用時間盲注
頁面無回顯:無論注入條件真假,頁面內容無變化。
無錯誤信息:服務器屏蔽了數據庫報錯。
需隱蔽攻擊:通過延遲間接獲取數據,不易被日志檢測。
9.什么情況下會使用布爾盲注。
頁面存在布爾狀態:如登錄成功/失敗、搜索結果有無。
可觀察的差異:例如真條件返回正常頁面,假條件返回404或空白。
10.sqli的類型有哪些,請舉例,并給出實際sql語句案例。
聯合查詢注入:UNION SELECT 1,2,password FROM users --
布爾盲注:AND (SELECT COUNT(*) FROM users) > 0 --
時間盲注:IF (1=1) WAITFOR DELAY '0:0:5' --
11.什么是sql注入,思考一下sql注入的靈魂是什么
通過用戶輸入將惡意SQL代碼插入到應用程序的數據庫查詢中,從而操縱數據庫執行非預期命令。
靈魂:數據與代碼的混合執行。根本原因是程序未對用戶輸入做嚴格過濾,使得輸入數據被當作SQL代碼解析。