ThinkPHP framework 任意代碼執行漏洞預警

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.