ThinkPHP是一個國內使用很廣泛的老牌PHP MVC框架。貌似國內有不少創業公司或者項目都用了這個框架。 最近官方發布了一個安全補丁,官方表述是:該URL安全漏洞會造成用戶在客戶端偽造URL,執行非法代碼。 可是貌似大多數開發者和使用者并沒有注意到此漏洞的危害性,應者了了,更不用說有多少人去升級了。隨后我對其進行了分析,發現此問題果然是一個非常嚴重的問題,只要使用了thinkphp框架,就可以直接執行任意php代碼。特此發帖預警各位。 我們來分析一下官方的補丁: /trunk/ThinkPHP/Lib/Core/Dispatcher.class.php 代碼如下: 125 - $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); 125 + $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']=\'\\2\';', implode($depr,$paths)); 這個代碼是把pathinfo當作restful類型url進行解析的,主要作用是把pathinfo中的數據解析并合并到$_GET數組中。 然而在用正則解析pathinfo的時候,主要是這一句: 代碼如下: $res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths)); 這里明顯使用了preg_replace的/e參數,這是個非常危險的參數,如果用了這個參數,preg_replace第二個參數就會被當做php代碼執行,作者用這種方式在第二個參數中,利用PHP代碼給數組動態賦值。 代碼如下: '$var[\'\\1\']="\\2";' 而這里又是雙引號,而雙引號中的php變量語法又是能夠被解析執行的。因此,攻擊者只要對任意一個使用thinkphp框架編寫的應用程序,使用如下方式進行訪問,即可執行任意PHP代碼: 代碼如下: index.php/module/action/param1/${@print(THINK_VERSION)} 由于是雙引號執行,這里為了保險起見,不給出更有危害性的代碼,利用這個還是需要點技巧的。 總之這個問題非常嚴重,找了一下,發現目前沒有修補漏洞的網站還是很多的。而ThinkPHP框架的特征其實非常好識別,有意者直接寫個scanner進行掃描也未必不可能。 為了不造成更大損失,特地發帖希望引起各位使用thinkphp做開發的同學關注。盡早升級官方的安全補丁 作者:GaRY |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信