週五下午爆洞能不能讓人們好好休個週末!php
本次漏洞關鍵位置:/thinkphp/library/think/Request.php
,lines:501由圖能夠看到在method函數中引入了可控的數據來源:
git
isset($_POST[Config::get('var_method')
github
$this->method
在取得該數據的值以後動態調用$this->{$this->method}($_POST)
,漏洞的關鍵位置即在該位置。攻擊者調用該類任意函數,並經過$_POST
做爲參數。動態調用__construct
函數即致使代碼執行。thinkphp
下圖爲Request類中包含的__construct
函數內容(lines:130):從中咱們能夠看到經過$options
參數,攻擊者能夠覆蓋到filter、method
屬性以及get屬性的值。
函數
同時在Request
當中的param
函數(lines:617)中能夠看到當$this->arrayParam
爲空時,即調用$this->get(false)
。
測試
$this->Get
函數(lines:673)內容以下:在get函數末端咱們能夠看到其調用了input
函數將攻擊者可控的get
內容進行了傳值。
this
input
函數內容以下(lines:976):
3d
咱們能夠看到getFilter
(lines:1005),繼續跟蹤至getFilter
函數(lines:1035):
code
Filter
返回後即進入input
函數中解析過濾器的if當中,緊接着其調用了filtervValue
函數(lines:1059):從中咱們不難發現$filter
和$value
都可自行控制。
blog
5.0.X<Thinkphp<5.0.24
版本升級到5.0.24最新版本規避漏洞
參考連接: https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003?diff=split