×

74CMS前台模板引擎注入漏洞漏洞复现

96
陌小皓
2017.03.29 09:11* 字数 617

74CMS 曝高危漏洞,攻击者只需注册会员账号,上传一份包含恶意内容的简历,即可控制网站服务器,进行任意操作。

漏洞复现.jpg

74CMS 又称 “骑士 CMS ”,是一项以 PHP 和 MySQL 为核心开发的一套免费并开源的专业人才网站系统。软件具有执行效率高、模板自由切换、后台管理功能方便等诸多优秀特点。74CMS 多应用于大型人才招聘网站,网站中通常会含有大量会员个人简历等私密信息,因此,该漏洞一旦被不法分子利用将产生极为严重的后果。


漏洞原理:

通过对 74CMS 最新版本进行源码分析,发现此漏洞是一个模板注入漏洞。 在文件 Application/Home/Controller/MController.class.php 中:


MController.class.php

可见,这里将 $type 参数传入 display 函数,display 函数是 ThinkPHP 中展示模板的函数。跟进了几个函数,进入了 View 类的 display 函数:

View 类

可见,这里拿到了 $templateFile 并传入 fetch 函数,将 fetch 的结果交给 render 函数。这两个函数,fetch 是将文件内容获取到,render 是使用 ThinkPHP 的模板引擎渲染。

拿自带的 favicon.ico 做下试验,可成功包含:


e.jpg
漏洞利用:

那么,这个漏洞如何利用?因为 type 的值是作为 display 函数的参数传入的,所以实际上这个漏洞可以理解为 “模板引擎注入”,现在只需要上传一个内容符合 ThinkPHP 模板格式的文件,再作为 type 的值即可。

查看 ThinkPHP 文档:

favicon.ico

可知,要使用原生 PHP 的话,只需要将代码包含在 <php> 标签内即可。
74CMS 里,个人用户创建简历后支持上传 docx 格式的简历。我们上传一个包含一句话木马的 docx 文件,将其作为模板。数据包如下:

数据包

pid 是简历 id,word_resume 就是包含模板的文件。上传成功,获取文件名和路径:

回显数据包

再将这个文件名作为 type 的值,成功执行一句话木马,CKnife(网站管理工具)连接,获取服务器权限:

远控

参考链接:
https://forum.90sec.org/forum.php?mod=viewthread&tid=10311

漏洞复现
Web note ad 1