SQL注入攻擊技術(四)--注入攻擊類型與方式


注入攻擊類型與方式

1、union注入

①:查詢

union操作符一般與order by語句配合使用

 注意:union前面不能有order by,如果后面也有order by,前面的也是白寫了,

所以要想使用order by+union就得把有order by的語句封裝成一個對象,再用select * from(......)as a union......。

只在有union的語句的最后寫個order by是ok的,就是兩個查詢結果放一起之后再排序的意思

union 和union all的區別,前者去重且排序、后者不去重不排序

mysql> select id,email from member where username='kevin' union select username,pw from member where id=1;

 

 

②:注入

v' union select username,pw from member where id=1#%

 

 

 上圖沒有出現錯誤,但不代表類似的都不會出現錯誤,如果出錯,他的原因可能是

因為查詢的字段不能超過主查詢的字段,這個時候可以在SQL語句后面加order by進行排序,通過這個辦法可以判斷主查詢的字段

通過以下方法猜它有幾個字段

 

 

 

 

 

 

 

 當查出有兩個字段以后,再進行聯合查詢

a' union select 1,2#%(如果有10個字段,就從1寫到10)

這里1,2這些說的是這個字段是可寫可帶入(帶入數據庫函數)的字段

 

 

 

 

 a' union select database(),user()#%,(再將這個帶進去查詢,結果如下圖所示)

 

 

 

 

 

2、information_schema注入

①:獲取pikachu數據庫的表名u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

 

 

 如上圖所示:獲取到這個數據庫中的表名,可以看出user表對我們最有用,那么接下來就要獲取表中的字段

k' union select table_name,column_name ,2 from information_schema.columns where table_name='users'#%

 

 

 

 

 

③:獲取字段值(如果經驗豐富的話就不需要前面的步驟,直接進行爆破)

 

 

 

 

3、基於函數報錯注入

 

①:技巧思路:
  在MYSQL中使用一些指定的函數來制造報錯,從而從報錯信息中獲取設定的信息,常見的select/insert/update/delete注入都可以使用報錯方式來獲取信息.

 

 

 

②:背景條件:

后台沒有屏蔽數據庫報錯信息,在語法發生錯誤時會輸出在前端.

 

4、insert注入

insert注入,就是前端注冊的信息最終會被后台通過insert這個操作插入數據庫,后台在接受前端的注冊數據時沒有做防SQL注入的處理,導致前端的輸入可以直接拼接SQL到后端的insert相關內容中,導致了insert注入。

注冊賬號,賬號新增到數據庫中

 

 

 

 

 

 

5、update注入

與insert注入的方法大體相同,區別在於update用於用戶登陸端,insert用於用於用戶注冊端。

一般登錄網站前台或后台更新用戶信息的地方,填寫用戶需要修改相關信息,通過Burp抓包在用戶名輸入相關payload,格式如下:

update注入

 

 

 ' or updatexml(0,concat(0x7e,(database())),0) or'

 

 

6、delete注入

一般應用於前后端發貼、留言、用戶等相關刪除操作,點擊刪除按鈕時可通過Brup Suite抓包,對數據包相關delete參數進行注入,注入方法如下:

delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)

7、Http Header注入

原理:user-agent頭帶入到了數據庫中,與數據庫產生交互

把Http Header直接帶入數據庫,程序員在寫程序的時候,頭里面的數據和數據庫有交互,沒有交互則沒有注入點

登錄的時候沒有注入,放包到get請求這里的時候,可以看見注入點

 

 

 

 

8、Cookie注入

cookie是網站用來識別用戶身份進行跟蹤會話的,雖然Cookie是由后端生成的,但每次頁面跳轉,后端都會對前端的Cookie的信息進行驗證,但如果后端獲取Cookie后放在數據庫中進行拼接,那么這也將是一個SQL注入點,

 

 

 

 

 

 

 

9、Boolian(布爾型)盲注

       盲注,即在SQL注入過程中,SQL語句執行選擇后,選擇的數據不能回顯到前端,我們需要使用一些特殊的方法進行判斷或嘗試,這個過程稱為盲注。

問:盲注有幾類,分別是怎么測的??????

SQL盲注分類:
1、基於布爾型SQL盲注

2、基於時間型SQL盲注

3、基於報錯型SQL盲注

怎么測

遇到布爾型SQL盲注,可以通過ascii值,

通過對比ascii碼的長度,判斷出數據庫表名的第一個字符。

注:用到substr()函數

用法:substr(string,start,length)

string(必需)規定要返回其中一部分的字符串。start(必需)規定在字符串的何處開始。length(可選)規定被返回字符串的長度。

判斷庫名的第一個字符

 

判斷長度

 

 

 

 

10、base on time(時間型)盲注

基於時間的延遲,構造一個拼接語句: vince' and if(substr(database(),1,1)='X' (猜測點)',sleep(10),null#,輸入后,如果猜測准確,那么就會響應10秒,如果錯誤會立刻返回錯誤。輸入:vince' and if(substr(database(),1,1)='p',sleep(10),null)#,再web控制台下,判斷出database的表名的一個字符為p。通過這個辦法我們就能逐步向下獲取數據。

 

 

 報錯型盲注用updatexml再結合if來判斷就ok

11、寬字節注入

前提條件:magic_quotes_gqc參數設為ON時

 

 

 

 

 

注意:寬字節空格、#如果被URL編碼了,可能造成不能成功。並且只有編碼為GBK的時候才可以,GBK可以繞過被轉義的反斜杠

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM