MyBB <= 1.8.20: From Stored XSS to RCE
字数 1626 2025-08-27 12:33:23
MyBB <= 1.8.20: 从存储型XSS到RCE漏洞分析与利用教学
漏洞概述
本教学文档详细分析MyBB论坛软件1.8.20及之前版本中存在的两个关键安全漏洞:
- 存储型XSS漏洞:通过精心构造的[video] bbcode实现跨站脚本攻击
- RCE漏洞:通过管理员面板中的样式表文件创建功能实现远程代码执行
这两个漏洞可形成攻击链,攻击者仅需一个普通论坛账号,通过向管理员发送恶意私信,当管理员查看私信时即可完全接管服务器。
受影响版本
MyBB 1.8.20及之前所有版本
漏洞技术分析
第一部分:存储型XSS漏洞
MyBB渲染流程
MyBB解析和渲染主题、帖子、私信分为三个步骤:
- 转义处理:转义所有HTML标记和双引号
- 视频bbcode处理:将[video] mycodes转换为嵌入视频的
<iframe>标签 - 其他bbcode处理:将所有其他mycode(如[url]、[quote]、[email])转换为HTML标记
漏洞成因
问题出在[video] bbcode与其他bbcode的不同处理方式上:
- [video] bbcode在第一步就被转换为
<iframe>标签 - 转换过程中会调用
urlcode()方法处理视频URL urlcode()方法允许通过URL编码绕过正则保护,注入其他bbcode
攻击向量构造
攻击者可构造如下恶意[video] bbcode:
[video]youtube.com/xyz[url]http://onload=evilCode()[/url][/video]
经过MyBB处理后,会生成以下恶意HTML:
<iframe src="youtube.com/xyz<a href="http://onload=evilCode(iframe>">
这导致:
- iframe的src属性被注入的href属性和其引号关闭
- onload事件处理程序被注入到
<iframe>标签中 - 当iframe加载时自动执行恶意JavaScript代码
关键代码分析
漏洞关键在于urlcode()方法的调用,它允许绕过正则保护并通过URL编码注入[url] bbcode。
第二部分:RCE漏洞
管理员面板漏洞
MyBB管理员可以在管理面板中:
- 管理活动主题的样式表
- 创建新的样式表文件并指定文件名
文件扩展名限制
代码中对文件扩展名有限制,只允许.css扩展名:
// 伪代码
if (!endsWith($filename, '.css')) {
die("Invalid file extension");
}
数据库截断漏洞
关键点:
- 样式表文件名存储在MySQL的
mybb_themestylesheets表中 name列定义为varchar(30)- 通过XML导入时未检查文件名长度
- MySQL默认会将超长字符串截断为30字符
攻击方法
攻击者可构造如下文件名:
aaaaaaaaaaaaaaaaaaaaa.php.css
(共34个字符)
处理过程:
- 通过.css扩展名检查
- 插入数据库时被截断为30字符:
aaaaaaaaaaaaaaaaaaaaa.php - 最终在文件系统中创建.php文件而非.css文件
漏洞利用链
完整攻击流程:
- 攻击者注册普通论坛账号
- 构造包含恶意[video] bbcode的私信发送给管理员
- 恶意JS代码利用管理员权限创建恶意样式表文件
- 管理员查看私信时触发XSS
- XSS利用管理员会话创建PHP webshell
- 攻击者访问webshell获得服务器控制权
漏洞修复方案
MyBB在1.8.21版本中修复了这些漏洞,主要修复措施包括:
- 改进bbcode解析逻辑,防止bbcode嵌套注入
- 加强文件名验证,防止截断攻击
- 增加导入时的长度检查
防御建议
- 立即升级到MyBB 1.8.21或更高版本
- 限制普通用户使用[video] bbcode的权限
- 实施内容安全策略(CSP)缓解XSS影响
- 管理员应使用独立浏览器或会话管理前后台
时间线
- 2019/04/29:漏洞报告给MyBB团队
- 2019/04/29:MyBB确认漏洞
- 2019/06/10:MyBB发布修复版本1.8.21
参考资源
- 利用视频演示: https://blog.ripstech.com/videos/mybb-stored-xss-to-rce.mp4
- MyBB官方网站: https://mybb.com/