Thinkphp5-0-X遠程代碼執行漏洞分析(2019-1-11)

週五下午爆洞能不能讓人們好好休個週末!php

分析過程

本次漏洞關鍵位置:/thinkphp/library/think/Request.php,lines:501由圖能夠看到在method函數中引入了可控的數據來源:
官方github
lines:501git

isset($_POST[Config::get('var_method')github

$this->method在取得該數據的值以後動態調用$this->{$this->method}($_POST),漏洞的關鍵位置即在該位置。攻擊者調用該類任意函數,並經過$_POST做爲參數。動態調用__construct函數即致使代碼執行。thinkphp

下圖爲Request類中包含的__construct函數內容(lines:130):從中咱們能夠看到經過$options參數,攻擊者能夠覆蓋到filter、method屬性以及get屬性的值。
lines:130函數

同時在Request當中的param函數(lines:617)中能夠看到當$this->arrayParam爲空時,即調用$this->get(false)
lines:617測試

$this->Get函數(lines:673)內容以下:在get函數末端咱們能夠看到其調用了input函數將攻擊者可控的get內容進行了傳值。
lines:673this

input函數內容以下(lines:976):
lines:9763d

咱們能夠看到getFilter(lines:1005),繼續跟蹤至getFilter函數(lines:1035):
lines:1035code

Filter返回後即進入input函數中解析過濾器的if當中,緊接着其調用了filtervValue函數(lines:1059):從中咱們不難發現$filter$value都可自行控制。
lines:1059blog

攻擊還原(僅供技術交流,請勿非法測試)

攻擊還原

影響範圍

5.0.X<Thinkphp<5.0.24

防護方案

版本升級到5.0.24最新版本規避漏洞
參考連接: https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003?diff=split

相關文章
相關標籤/搜索