Discuz uc.key泄露导致代码注入漏洞 DiscuzX3.4最新版修复方法

更新时间:2018-04-12点击: 技术分享

标题: Discuz uc.key泄露导致代码注入漏洞
简介:



在Discuz中,uc_key是UC客户端与服务端通信的通信密钥,discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,最终进入网站后台,造成数据泄漏。您也可以登录官方网站更新到最新版本解决。

解决方案:

方案一:使用云盾自研补丁进行一键修复; 方案二:更新该软件到官方最新版本或寻求该软件提供商的帮助。 【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了该漏洞,云
盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】

 

网上许多修复的方法,其实Discuz官方在新版X3.4中已经做过了修复,但是阿里云依然提示有漏洞需要修复。

通过阿里云安骑士修复后与源文件对比后发现有两处修改地方,找到api/uc.php并打开:

1.找到在39行的地方

if(!defined('IN_UC')) {
require_once '../source/class/class_core.php';
$discuz = C::app();
$discuz->init();
... ...
修改为【红色为修改的地方】
if(!defined('IN_UC')) {
require_once '../source/class/class_core.php'; if (method_exists("C", "app")) { $discuz = C::app(); $discuz->init(); } 
$discuz = C::app();
$discuz->init(); 
... ...
2.找到273行的地方
function updateapps($get, $post) {
global $_G;
if(!API_UPDATEAPPS) {
return API_RETURN_FORBIDDEN;
}
... ...
修改为【红色为修改的地方】
function updateapps($get, $post) { if($post['UC_API']) { $post['UC_API'] = addslashes($post['UC_API']); } 
global $_G;
if(!API_UPDATEAPPS) {
return API_RETURN_FORBIDDEN;
}
... ...
修改后上传覆盖,然后回到安骑士点击验证即可修复完毕。


推荐阅读