近期我们sinesafe安全部门审计discuz最新版的时候发现配置文件写入导致代码执行的问题。cms安装的时候一般会分为几个步骤去进行,其中有对配置文件config进行写入的步骤,当写入的时候未严格限制传入的参数就存在代码执行问题。
源码信息:Discuz_X3.4_GIT_SC_UTF8
问题文件: \upload\install\index.php
漏洞类型:配置文件写入导致代码执行
站点地址:http://www.discuz.net/forum-10-1.html
直接看配置信息写入的代码段为 \upload\install\index.php
还是这个文件,代码段为第266行;
直接安装到写入配置信息的步骤;
我们以前缀dbinfo[table_pre]参数为利用,看到使用单引号和括号括起来,所以payload为;
payload = pre_’);phpinfo();//
发到上述抓包里点击安装即可写入配置文件;
这时候看这个配置文件;
http://127.0.0.1/Discuz_X3.4_GIT_SC_UTF8/dir_SC_UTF8/upload/uc_server/data/config.inc.php
这个漏洞原理比较简单,针对其防御方法是需要对传入的配置信息进行转义处理,这里只要转义单引号就可以了,但是刚开始我有疑惑的点就是这里的payload在实际情况下,我们需要通过类似“爆破”的思路去测试大量payload,但是由于“安装锁”的存在,安装一次就会锁定程序生成install.lock文件防止重装,也就是“爆破”不了,那么这个漏洞是不是就利用不了呢?为了解决这个疑问,我重新看了下安装时候的源码信息,发现这个漏洞还是可以利用的;