压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

免費開源相冊Piwigo<= v2.7.1 SQL注入漏洞分析

前段時間免費開源相冊Piwigopwigo出了一個piwigo <= 2.6.0sql注入漏洞。漏洞公布的時候,piwigo已經更新到了2.7.1。但是,這個漏洞公布的時候確實是一個貨真價實的0day,影響piwigo全版本。

下面是當時在官方網站測試的記錄:

20150316032317862

跟piwigo作者溝通了解到他們知道這個漏洞并且認為已經修復了。給他們提供了更多的細節和證明之后,piwigo很快發布了新版本。

20150316032347280

漏洞分析

漏洞的分析看起來比較簡單,是由于functions_rate.inc.php文件中的rate_picture函數沒有對傳入的$rate變量進行過濾,直接拼接到SQL中執行:代碼如下

20150316032410395

為什么這么簡單的一個問題,piwigo沒有發現,認為這個漏洞已經修復了呢。關鍵在與rate_picture函數開頭其實是有個對$rate變量的過濾的。如下

20150316032429758

判斷$rate是否是$conf[&#039;rate_items&#039;]的項。而后面這個數組的值是配置文件里寫死的。

20150316032509727

看起來這句的功能是設置了一個rate變量的白名單。只能是0,1,2,3,4,5其中之一。這樣子應該很安全才對。當然事實證明這樣子寫是不安全的。當$rate = “5’aaaaaaaaaaaaaaaaa “時,in_array($rate, $conf[‘rate_items’]) 這個判斷是返回True的。這是php里不同類型變量比較時候的一個特性。關于php比較運算符的特性可以參考這里。

簡言之:當字符串跟整型變量使用”==”比較的時候,會將字符串轉換成整型,再進行比較。

20150316032612119

經過測試發現,in_array方法在進行比較時候的邏輯跟”==”是一致。

20150316032659246

所以,利用這個特性,相當于完全的bypass in_array的過濾。可以輸入任意的數據拼接到SQL語句中,只要以數組中的數字開頭就可以了。此外php中的switch也存在類似的特性。

20150316032835286

漏洞修復

升級版本即可。官方在新版中,對$rate用正則又判斷了一把。限制了只能是數字。話說國內的程序一般就intval一下了。

20150316032926318

文章來源:Freebuf黑客與極客(FreeBuf.COM)

上一篇:小漏洞大影響:來看看希爾頓酒店官網的CSRF漏洞

下一篇:谷歌正為Gmail開發PGP端到端加密技術