sqli-labs(十四)(寬字節注入)


數據庫使用gbk編碼的時候,會將兩個字符合並成一個中文。

寫在前面吧,對php的代碼審計也會有幫助

直接使用 set character_set_client=gbk 或者是常見的mysql_query("SET NAMES gbk");都會存在款字節注入。

官方推薦使用Mysql_set_charset('gbk','$conn'),但是也不是完全就沒有問題了

推薦使用mysql_query("SET NAMES gbk");后set character_set_client=binary。

第三十二關:

這關是寬字節注入漏洞,特殊值字符如單引號都會被轉義 '  ->  \'

 

原理我有點說不清楚:通常來說,一個gbk編碼漢字,占用2個字節。一個utf-8編碼的漢字,占用3個字節。在php中,我們可以通過輸出echo strlen("中");頁面編碼為gbk時輸入2,utf-8時輸入3;mysql在使用GBK編碼的時候,會認為兩個字符為一個漢字,例如%df%5c就是一個漢字(前一個ascii碼大於128才能到漢字的范圍)。我們在過濾 ' 的時候,往往利用的思路是將 ' 轉換為 \' 。所以如果我們輸入%df%27(%27就是單引符號會被轉義成\' 也就是%5c%27),在后台%df會將%5c“吃掉”,組成一個漢字(%df%5c是一個漢字)。

輸入?id=1%df%27,頁面會報錯說明單引符號起作用了。

 

 輸入?id=%df%27 union select 1,2,3 %23

 

 第三十三關:

后台使用的addslashes()做的過濾,繞過手法和上面完全一樣

 

第三十四關:

和第三十三關一樣,只是將get請求換成了post請求。

第三十五關:

連引號都不需要用了,直接聯合注入就好,不知道這關為什么要這樣,沒摸清用意。

 

第三十六關:

使用的是mysql_real_eacape_string(),會比addslashes多過濾些東西

 還是可以使用寬字節注入。

 

第三十七關:

將第三十六關的get請求轉成了post請求。


免責聲明!

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



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