漏洞说明

进入欲删除账号的网站,登陆欲删除的账号
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');
END
最后修改:2020 年 12 月 27 日
如果觉得我的文章对你有用,请随意赞赏