### 测试版本:
Discuz 6.x,7.x
### 漏洞成因:
1、使用全局变量 `$GLOBALS['_DCACHE']` 时未作校验,导致攻击者可以在提交中构造恶意代码。
2、php函数 preg_replace() 使用e修饰符时,将替换后的字符串作为php代码执行(eval函数方式), 并使用执行结果作为实际参与替换的字符串。
### 验证方式:
1、进入本地测试地址:http://127.0.0.1/discuz7.2/Discuz_7.2_SC_UTF8/upload/index.php
2、chrome F12 打开 console 设置 cookie,如图![text](https://images.seebug.org/contribute/7bea432e-01e5-4cf7-b6b8-d4b34835b2eb-setCookie.png)
3、如:依次点击进入【默认模块】->【7.2新增功能及功能强化】 或者直接访问 http://127.0.0.1/discuz7.2/Discuz_7.2_SC_UTF8/upload/viewthread.php?tid=13&extra=page%3D1 便可看到 `phpinfo()` 执行成功。
如图:![](https://images.seebug.org/contribute/3b5b145c-50f6-4443-a503-578881a144e0-phpinfo.png)
### 触发位置
upload/includ/discuzcode.func.php 120 行:
```
$message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies);
```
### 防护方案
过滤用户输入
暂无评论