discuz删号漏洞简易修复
漏洞说明
进入欲删除账号的网站,登陆欲删除的账号
按 F12
打开控制台,点击 Console
,复制以下代码到 Console
中,按下 Enter
键执行代码
location.href=((d=(await(await fetch("./home.php?mod=spacecp&ac=avatar",{credentials:'include'})).text()).match(/\/\/\S+\/images\/ca\S+&ag/g)[0].replace('images/camera.swf?','?m=user&a=delete&'))&&confirm('真的要[永久]删除你的ID?'))?d:'';
弹出选项框,点击确定,如果显示大于 0 的整数,说明帐号删除成功。
说明:
删除的是 UCenter 内的帐号,UCenter 会通知 Discuz! 删除用户帐号。
通知可能出现延迟,或不成功。因此可能不会立即登出网站。 如果通知最终成功,该帐号及其所有帖子都会从 Discuz! 中删除。
如果通知不成功,帐号登出后也将无法登录。此时可以注册一个新的同名帐号,覆盖原帐号。原帐号信息将被删除,其帖子将无法阅读(但不会删除)。
修复方案
由于大致原理就是修改头像和删除用户的api的input加密字符串是通用的,导致可以直接删除,所以修改下头像传参即可。
简易修复方案
找到source/plugin/mobile/api/2/uploadavatar.php
将
$result = self::uc_api_post_ex('user', 'rectavatar', array('uid' => $_G['uid']), $extra);
修改为
$result = self::uc_api_post_ex('user', 'rectavatar', array('uid_avatar' => $_G['uid']), $extra);
source/plugin/wechat/wechat.class.php
将
$result = self::uc_api_post_ex('user', 'rectavatar', array('uid' => $uid), $extra);
修改为
$result = self::uc_api_post_ex('user', 'rectavatar', array('uid_avatar' => $uid), $extra);
uc_client/client.php
将
$uc_input = uc_api_input("uid=$uid");
修改为
$uc_input = uc_api_input("uid_avatar=$uid");
uc_server/control/user.php
找到 avatar 相关,共三处
第一处搜索
function ondeleteavatar() {
第二处搜索
function onuploadavatar() {
第三处搜索
function onrectavatar() {
将
$uid = $this->input('uid');
修改为
$uid = $this->input('uid_avatar');