首页 > 漏洞预警和分析 > dz(uc_server)本地包含通杀最新版

dz(uc_server)本地包含通杀最新版

[2018.03.07]

看完后别觉得撞洞了,这个是新的利用地方。

漏洞文件:

/uc_server/control/admin/credit.php

       function onsync() {

        $this->load('note');

        $this->load('misc');

        $this->load('cache');

        $step = intval(getgpc('step', 'G'));

        if(!$step && is_array($this->cache['apps'])) {

            $credits = array();

            $stepapp = intval(getgpc('stepapp', 'G'));

            $testrelease = intval(getgpc('testrelease', 'G'));

            $appids = array_keys($this->cache['apps']);

            $appid = $appids[$stepapp];

            if(!$stepapp) {

                $_CACHE['credits'] = array();

            } else {

                include UC_DATADIR.'cache/credits.php';

            }


前面的load加载可以忽略,getgpc自然就是获取,这里是获取step的值。但下面有一个if所以我们这里setp不填写还有就是判断cache[“apps”]是否为数组。这里肯定是为TRUE继续

    $stepapp = intval(getgpc('stepapp', 'G'));

            $testrelease = intval(getgpc('testrelease', 'G'));

这两个也是获取,但下面有一个array_keys返回所有键名然后用我们的$stepapp当键值然后赋值。这里我是看了apps中的数组但默认都是输入0,不然找不到键值

if($app = $this->cache['apps'][$appid]) {

                $apifilename = isset($app['apifilename']) && $app['apifilename'] ? $app['apifilename'] : 'uc.php';

                if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$apifilename) {


然后下面就是判断apps中是否存在appid,当然是肯定存在则继续


这里是判断是我们app中是否存在apifilename,默认就是uc.php然后下面一个if顺便包含了我们的apifilename。这里得说下if会先判断前面再判断后面。

所以这里我们$app['extra']['apppath']必须为true不然不会执行包含。


那么本地包含:



 

这里提示的是:当我们输入../这样的时候会自动转换为绝对路径。那么我们这里就这样填写../

 

应用接口名字就填入我们的马儿地址。我们在根目录创建一个1.txt来测试



然后来保存../1.txt



更新成功了

 

然后burp请求

 




 

 

成功显示出phpinfo

 



北京通和实益电信科学技术研究所有限公司 版权所有 京ICP备15030238号-1