寬字節注入原理
GBK 佔用兩字節,即一個符號佔用兩個字節
ASCII佔用一字節
PHP中編碼爲GBK,函數執行添加的是ASCII編碼(添加的符號爲“\”),MYSQL默認字符集是GBK等寬字節字符集。
大家都知道%df’ 被PHP轉義(開啓GPC、用addslashes函數,或者icov等),單引號被加上反斜槓\,變成了 %df\’,其中\的十六進制是 %5C ,那麼現在 %df\’ =%df%5c%27,如果程序的默認字符集是GBK等寬字節字符集,則MySQL用GBK的編碼時,會認爲 %df%5c 是一個寬字符,也就是縗,也就是說:%df\’ = %df%5c%27=縗’,有了單引號就好注入了。
%df%5c各站一個字節,合起來就是兩個字節
因爲又是GBK編碼
所以就把這兩個字節合併爲縗
代碼分析
對於第一個函數check輸入並沒有進行過濾
而是直接用
倒數第四行表示使用的是GBK編碼
請看倒數第四行
id=’ ’
你輸入id=1%df’
%df後一個引號閉合了前一個引號,這就是你之前學的
那爲啥要多此一舉呢?
不直接id=1’ union select啥啥
因爲php有個轉義函數
你輸入5’後的引號會被變爲’
即多出了一個斜槓,所以就不能直接用上述id=5’ union select
所以需要id=1%df’ union select 1,user(),version() --+
Sqlmap安全測試
–search獲取數據庫名錶名字段名
、