盲注原理
盲注的分類
盲注常用函式
一、sql盲注概述
1.如果資料庫執行返回結果時只反饋對錯不會返回資料庫中的資訊 此時可以採用邏輯判斷是否正確的盲注來獲取資訊。
2.盲注是不能通過直接顯示的途徑來獲取資料庫資料的方法。
在盲注中,攻擊者根據其返回頁面的不同來判斷資訊(可能是頁面內容的不同,也可以是響應時間不同,一般分為三類)
盲注可以分為三類:
布林盲注
時間盲注
報錯型盲注
1、布林盲注
原理:盲注查詢是不需要返回結果的,僅判斷語句是否正常執行即可,所以其返回可以看到乙個布林值,正常顯示為true,報錯或者是其他不正常顯示為false
查詢語句:
select userid from nember where u_name=$name and u_pass=$pass
注入語句
name=-1' and(select mid(u_name,1,1)from member where userid = 1)='a'
2、時間盲注
原理:某些查詢不需要返回結果的,僅判斷查詢語句是否正確執行即可,可以使用sleep來進行時間盲注,取頁面執行時間(結束時間-開始時間)來判斷sleep函式是否正常執行,所以其是否正常執行可以看到乙個布林值,正常為true 報錯false.
查詢語句
select userid from member where u_name=$name and u_pass=$pass;
注入語句
name=1' and (select mid(u_name,1,1) from member where userid=1)='a' and(select sleep3))
sql時間型別的盲注本質是利用插入的sql語句執行造成時間延遲
mysql時間盲注幾種延遲方法:
get_lock函式() 需要使用 mysql_pconnect函式來連線資料庫。
在乙個session中可以先鎖定乙個變數例如:select get_lock(『do9gy』,1)。
然後通過另乙個session再次執行get_lock(『do9gy』,5)此時會產生5秒的延遲,其效果類似於sleep(5)。
1、二分法
二分法sql盲注示例
返回正常說明長度小於10
and exists(select * from admin where id=1 and len(name)< 10)
返回正常說明長度大於5
and exists(select * from admin where id=1 and len(name)> 5)
返回正常說明密碼第乙個字元是應用('0'='48','a'='65','a『=97)
and exists (select * from admin where id=1 and mid(password,1,1)>'a')
mid() 擷取
mid(column_name,start,length)
rand() 產生乙個隨機函式
floor() 向下取整的函式
floor(rand(0)*2) 返回0或者1
floor(rand(0)*2) 返回0或者1
建立乙個table
insert into table value(1,『a』,『b』) select floor(rand(0)*2) from tbale
sql注入常用函式
1 .布林型
left(a,b)從左擷取a 的前b位:left(database(),1) > 『s』
substr(a,b,c)從b位置開始,擷取字串a的c長度
ascii() 將某個字元轉換為ascii值:ascii(substr(user),1,1)=101#
mid(a,b,c)從位置b開始,擷取a字串的c位 regexp正規表示式的用法
user()結果位root ,regexp為匹配root的正規表示式:select user()』
(1)left(a,b)函式
left()函式是乙個字串函式,它返回具有指定長度的字串的左邊部分。
left(str,length);如果str或length引數為null,則返回null。
str是要提取字串的字串、length是乙個正整數,指定將從左邊返回的字元數。
length大於str字串的長度,則left返回整個str字串 (返回str的長度,以位元組為單位,乙個多位元組可算作多位元組。
(2)substr() 或 substring()函式
sbustr(str,pos)開始的位置,一直擷取到最後。
sbustr(str,pos,len);表示從pos開始的位置,擷取len個字元(空白也算字元)![在這裡插入描述
select substring(『chinese』,-3); //倒數第三個字元之後的子字串-ese
(3)ord() mid()函式
函式ord() 函式返回字串str的最左面字元的ascii**值
函式mid()用於得到字串的一部分。
(4)cast() 和 convert()函式
cast() convert() 函式可用來獲取乙個型別的值,並生產另乙個型別的值。
> 可轉換的型別 二進位制,通帶binary字首的效果:binary 字元型,
> 可帶引數:char()
> 日期:date
> 日期時間型:datetime
> 浮點型:decimal
> 整數:signen
> 無符號整數:unsignen
(5)ifnull()函式
ifnull()意義是當欄位a是null時取b,不是null取a
(6)sleep()或benchmark()
通過執行select sleep(n)可以讓此語句執行n秒
條件:指定條件的記錄存在時才會停止指定的秒數
列如:查詢條件為name='pig』結果表明記錄不存在,執行結果為0
(7).基於時間的盲注在使用延遲函式上可以有兩個選擇:
benchmark(count,expr)函式
sleep(time)函式
前者通過將expr語句執行 count次來到達延遲的目的,後者是直接延遲time時間
benchmark是乙個內建函式,其作用是來測試一寫函式的執行速度,benchmark()其中有兩個引數,
第乙個是執行次數,另乙個是要執行的函式或者表示式。
3.xpath型別函式(mysql version >= 5.1.5)
(1)updatexml() 函式功能:改變文件中符合條件的節點的值。
updatexml(xml_documnet,xpath_string,new_value);
第乙個引數:xml_document是string格式,為xml文件物件的名稱
第二個引數:xpath_string(xpath格式的字串)
第三個引數:new_value,string格式,替換查詢到的符合條件的資料
超過長度可以配合substr()
(2)extractvalue() 函式功能:對xml文件進行查詢的函式,其實就是相當於html檔案中標籤查詢元素。
語法:extractvalue(目標xml檔案,xml路徑)
第二個引數 xml中位置是可以操作的地方,xml文件中查詢字元位置是用 /***/***/***…
這種格式,如果寫入其他格式,就會報錯,並且會返回寫入的非法格式內容,而這個非法內容就是號想要查詢的內容
SQL盲注 時間盲注,dnslog盲注
時間盲注原理 id get id sql select from users where id id limit 0,1 result mysql query sql row mysql fetch array result if row else 存在sql注入漏洞 然而頁面不會回顯資料,也不會回...
sql注入 盲注
一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...
sql注入 盲注
一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...