from:
[url]http://blog.xdxf.net/show-383-1.html[/url]
by 職業欠錢
昨天花了點時間去看寬字符的問題,才發現以前的理解一直有誤。
%df' 被PHP轉義(開啓GPC、用addslashes函數,或者icov等),單引號被加上反斜槓\
變成了 %df\'
其中\的十六進制是 %5C ,很好,如今 %df\' = %df%5c%27
其實這也沒什麼,但是問題來了, 如何對待這3個字符?
取決於後臺處理程序的默認編碼(包括GBK在內的全部寬字符編碼,具體能夠看neeao大牛blog上的fuzz結果,貌似有4個編碼都會有問題?本文出於方便的角度只說GBK爲)。
MYSQL用GBK的編碼時,會認爲 %df%5c 是一個寬字符,也就是「縗」
如今 %df\' = %df%5c%27=縗'
總結一下:
%df’ --》 %df\' = %df%5c’ = 縗'
%df 並非惟一的一個字符,應該是% 81-%FE 之間任意的一個均可以。
單引號在注入裏絕對是個好東西,尤爲是,不少程序員過度依賴於GPC或者addslashes的轉義。理論上說,只要數據庫鏈接代碼設置了GBK或者是默認編碼是GBK,如今程序裏處處都是注入漏洞。(事實上,這種變換在XSS等領域也發揮了巨大的做用,在PHP和Linux後臺程序結合的時候,還可能形成命令注入)
能夠參考的測試方法(替代原來的 and 1=1 ):
%df%27 or 1=1/*
%df%27 or 1=2/*
不過,在實際環境裏,我Google了很久,找到的幾個門戶網站注入點,都是沒開啓GPC,直接就能注的,被kj大牛鄙視之後,很尷尬的中止了這種重複性同質化體力勞動。
理解這個漏洞,不該該去看80sec的漏洞公告,或者上次那個什麼總結。
我以爲安焦的文章說的更清楚:
[url]http://www.xfocus.net/articles/200805/979.html[/url]