ThinkPHP 5.0.* 遠程命令執行漏洞預警

收藏待读

ThinkPHP 5.0.* 遠程命令執行漏洞預警

ThinkPHP 5.0.* 遠程命令執行漏洞預警

0x00 事件背景

2019年1月11日,360CERT發現某安全社區出現關於ThinkPHP5 RCE漏洞的威脅情報,不久之後ThinkPHP5官方與GitHub發佈更新。

該更新修復了一處嚴重漏洞,該漏洞可導致遠程命令代碼執行

0x01 影響範圍

ThinkPHP 5.0.x

  • 5.0.x ~ 5.0.23

0x02 修復建議

官方在GitHub中進行了更新: 版本更新

ThinkPHP 5.0.* 遠程命令執行漏洞預警

  • 升級代碼到最新版本5.0.24
  • 同時建議用戶在線上環境中關閉debug模式

0x03 漏洞驗證

該漏洞危害高,影響嚴重:

ThinkPHP 5.0.* 遠程命令執行漏洞預警

0x04 漏洞分析

漏洞主要出現在ThinkPHP Request類的method方法中 (thinkphp/library/think/Request.php)

Request類可以實現對HTTP請求的一些設置,其中成員方法method用來獲取當前請求類型,其定義如下:

ThinkPHP 5.0.* 遠程命令執行漏洞預警

當傳入的參數為false的時候,會取配置項var_method,其默認值為_method

ThinkPHP 5.0.* 遠程命令執行漏洞預警

$this->{$this->method}($_POST); 通過post參數_method可以實現對當前類的任意方法進行調用。

通過調用當前類的構造方法可以覆蓋任意成員屬性的值:

ThinkPHP 5.0.* 遠程命令執行漏洞預警

這裡通過覆蓋filter屬性,filter屬性保存了用於全局過濾的函數。

但是在thinkphp5.0.23中,會對filter值重新賦值為空,導致無法利用。

ThinkPHP 5.0.* 遠程命令執行漏洞預警

在thinkphp/library/think/App.php中開啟debug的時候會調用Request類的param方法。

ThinkPHP 5.0.* 遠程命令執行漏洞預警

在thinkphp/library/think/Request.php param方法中會調用到method方法,並將參數設置為true。

ThinkPHP 5.0.* 遠程命令執行漏洞預警

當參數為true的時候,會調用server方法

ThinkPHP 5.0.* 遠程命令執行漏洞預警

ThinkPHP 5.0.* 遠程命令執行漏洞預警

會走到 input方法,通過之前方法覆蓋server成員屬性值為array(),input方法代碼如下:

ThinkPHP 5.0.* 遠程命令執行漏洞預警 最終會調用filterValue形成任意代碼執行:

ThinkPHP 5.0.* 遠程命令執行漏洞預警

0x05 時間線

2019-01-11 360CERT發現漏洞威脅情報

2019-01-11 ThinkPHP發佈補丁更新

2019-01-11 360CERT發佈預警分析

0x06 參考鏈接

  1. ThinkPHP5 github更新

原文 : 安全客

相關閱讀

免责声明:本文内容来源于安全客,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。