前言
Codoforum是一套基于PHP和MySQL的轻论坛软件,MVC架构,其UI简洁、干净,且采用自适应设计,因此广受好评。近日,Codoforum修复了一个存储型跨站脚本漏洞,漏洞编号CVE-2020-5842,影响版本4.8.3。攻击者在注册页面通过构造恶意的用户名,即可成功将js语句插入数据库,之后由管理员在后台用户管理页面触发。后经过测试分析,发现后台图片上传点没有经过合理的判断,可以上传 PHP 文件,攻击者利用 XSS 获取到管理员 Cookie 后,以管理员身份登录后台,进而通过上传点 Getshell。
存储型 XSS
sys/Controller/user.php 文件用于处理前台用户的登录和注册操作,当新用户进行注册时,请求交由 register 方法处理:
可以看到,register 内部在处理用户输入的数据时,对用户名只做了简单的替换操作,将双引号替换为了 \",之后就调用 register_user 进行用户注册:
register_user 也没有进行过滤,直接将用户提交的注册信息写入了数据库,以 "><svg/onload=alert(1)>
为例,数据库中插入的信息为:
再来看看输出部分。除了这个用户的个人页面,后台的用户管理页面也会触发 XSS:
后台用户管理页面的数据由 /admin/modules/users/manage.php 从数据库中取出,然后传递给模板文件 /admin/layout/templates/users/manage.tpl:
模板文件中,同样没有对数据库中取出的数据进行任何处理就直接输出到了页面上,从而导致了 XSS:
针对这个漏洞,Codoforum 在新版本中做了两处针对性修复,首先用户注册时提交的用户名部分,使用了 strip_tags 方法去除掉了 html 标签:
页面输出部分,模板处使用 escape 对数据库取出内容做了实体化处理:
文件上传
Codoforum 后台页面可以对前台用户上传的文件类型进行设置,这限制了前台用户只能上传图片格式的文件:
通过 XSS 获取到管理员的 Cookie 后,可以在这里加入 php,这样前台用户就可以通过个人信息编辑页面上传 shell 了。但是实际上并不需要这么麻烦,Codoforum 的后台管理页面限制很少,只要是以管理员的身份登录,基本就可以执行任何操作了。
这是后台全局配置页面上传论坛 logo 的处理逻辑,可以看到,文件没有做任何的处理就直接上传到了 /sites/default/assets/img/attachments/ 目录下。Codoforum 的开发团队可能认为,登录了后台的既然是管理员,那所做的所有操作都应该是可信的,所以后台管理页面的安全性并不高。我测试了最新的 4.8.7 版本 Codoforum,后台页面仍然存在多处存储型 XSS,有些也会影响到前台用户,有兴趣的朋友可以测试着玩一玩。
漏洞利用
首先在注册时构造恶意的用户名,使其加载 XSS 平台 js 文件:
之后只要管理员在后台访问了用户管理页面,我们就拿到了管理员的 Cookie:
将 Cookie 设置为 XSS 平台接收到的管理员 Cookie:
刷新页面,成功登录后台:
在全局设置处上传 shell 文件:
shell 地址为 http://xx.xx.xx/sites/default/assets/img/attachments
加上上传的文件名。使用远程管理工具连接:
参考
https://www.exploit-db.com/exploits/47876
作者: JenI 转载请注明出处,谢谢
Comments !