### 测试版本: 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,如图 3、如:依次点击进入【默认模块】->【7.2新增功能及功能强化】 或者直接访问 http://127.0.0.1/discuz7.2/Discuz_7.2_SC_UTF8/upload/viewthread.php?tid=13&extra=page%3D1 便可看到 `phpinfo()` 执行成功。 如图: ### 触发位置 upload/includ/discuzcode.func.php 120 行: ``` $message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies); ``` ### 防护方案 过滤用户输入
### 测试版本: 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,如图 3、如:依次点击进入【默认模块】->【7.2新增功能及功能强化】 或者直接访问 http://127.0.0.1/discuz7.2/Discuz_7.2_SC_UTF8/upload/viewthread.php?tid=13&extra=page%3D1 便可看到 `phpinfo()` 执行成功。 如图: ### 触发位置 upload/includ/discuzcode.func.php 120 行: ``` $message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies); ``` ### 防护方案 过滤用户输入