ColdFusion爆炸:从XSS到RCE的连锁反应

boyanx2个月前技术教程9

在审计ColdFusion 10 以及11的管理面板期间,我发现一个基于DOM的跨站脚本漏洞。在本文中我将向大家展示如何利用该漏洞从ColdFusion应用服务器获取远程代码执行。

发现这个漏洞之后,我向Adobe安全团队披露了整个过程。CVE对这一漏洞分配了一个CVE编号:CVE-2015-0345

请通过ColdFusion管理面板安装补丁来修复这个漏洞,并确保该管理面板没有向外泄漏。

注意:该漏洞只针对已经通过管理面板身份验证的用户。因此,通过下面记录的exploit获取远程代码执行,最后执行最后的XSS向量。

漏洞分析

ColdFusion的管理面板是其配置服务的核心接口,它包含的功能包括但不限于用户管理,数据库配置,服务器管理。当ColdFusion管理页面动态预览显示文件或目录时,JavaScript库jqFileTree.js用来协调服务器端APIs。

访问下面的ColdFusion管理页面,可以看出使用的jqFileTree.js库:

/CFIDE/administrator/filedialog/index.cfm?type=dir&fromjscript=true&dialogStyle=selectDirectory&formelem=ORMSearchIndexDirectory&defaultPath=

fileTree——ColdFusion API提供位于系统的文件和文件夹路径。

你可以直接访问AJAX API返回文件和文件夹路径的列表格式,执行访问以下URL:

/CFIDE/administrator/ajaxtree/jqueryFileTree.cfm?type=dir

将这些因素结合起来,通过JavaScript请求的路径就可以出现想上图中的情况了。

ColdFusion是通过JavaScript来实现这个功能的,通过提供的AJAX API调用fileTree函数容纳所有的文件和文件夹。AJAX API的内容通过fileTree进行解析;文件和文件夹返回到调用的API然后增加到pathbox用户接口,如第一张图所示。ColdFusion执行的这个JavaScript如下:

?

1

2

3

4

5

6

7

8$('#fileTreeDemo_1').fileTree({

script:

'../../administrator/ajaxtree/jqueryFileTree.cfm?type=dir',

expanded: '\x2F'

}, function(file) {

path = file;

document.getElementById("pathbox").value = path;

});

这个脚本的价值在于提供给文件树的并不是硬编码,而是放置于JavaScript环境中的页面加载内容。这是基于用户输入的URL动态生成的。

通过ColdFusion服务端脚本自身插入到页面HTML源的字符串,而不是通过客户端来插入:

插入到前面JavaScript源码中的值。

'../../administrator/ajaxtree/jqueryFileTree.cfm?type=dir'

“?type=dir”部分字符串是从用户输入(URL)获取,所以可以认为就是用户输入。

通过一些测试,我发现“type”参数在JavaScript环境中编码是不正确的。

当ColdFusion的跨站脚本过滤以及特殊字符编码开启之后,传统的XSS向量变得苍白无力。此外,采用黑名单过滤掉HTML中的标签以及尖括号(>和

因此,最好的选择便是创建一个合适的JavaScript payload。

XSS概念证明

经过篡改之后,我构造了如下payload触发document.location提示:

',expanded:'\x2F'},function(file){path = file;document.getElementById("pathbox").value = path;});prompt(document.location);$('#fileTreeDemo_1').fileTree({script:'../../administrator/ajaxtree/jqueryFileTree.cfm?type=dir

上面的payload脱离了现有的函数,然后执行恶意JavaScript。在本例中,我们已经注入JavaScript,并且会执行prompt(document.location)。

payload剩下的部分为fileTree函数的正确配置,这是为了确保ColdFusion文件/文件夹 浏览器依旧在页面正常运行,从而减轻目标的怀疑。

上面payload利用的URL编码以及在原URL替换type参数的值:

?

1http://127.0.0.1:8500/CFIDE/administrator/filedialog/index.cfm?type=dir%27%2c%65%78%70%61%6e%64%65%64%3a%27%5c%78%32%46%27%7d%2c%66%75%6e%63%74%69%6f%6e%28%66%69%6c%65%29%7b%70%61%74%68%20%3d%20%66%69%6c%65%3b%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%74%68%62%6f%78%22%29%2e%76%61%6c%75%65%20%3d%20%70%61%74%68%3b%7d%29%3b%70%72%6f%6d%70%74%28%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%29%3b%24%28%27%23%66%69%6c%65%54%72%65%65%44%65%6d%6f%5f%31%27%29%2e%66%69%6c%65%54%72%65%65%28%7b%73%63%72%69%70%74%3a%27%2e%2e%2f%2e%2e%2f%61%64%6d%69%6e%69%73%74%72%61%74%6f%72%2f%61%6a%61%78%74%72%65%65%2f%6a%71%75%65%72%79%46%69%6c%65%54%72%65%65%2e%63%66%6d%3f%74%79%70%65%3d%64%69%72&fromjscript=true&dialogStyle=selectDirectory&formelem=ORMSearchIndexDirectory&defaultPath=

当目标访问上面的URL之后,任意JavaScript,在本例中我已经插入,prompt(document.location);将会在浏览器中执行,下面这张图足以证明:

XSS到RCE证明

我给受影响系统创建了两个payload。第一个payload禁用ColdFusion管理面板密码的请求,第二个则是上传一个WEB后门Shell。

为了让这篇文章让人一看就有种干净的感觉,我将注重讲解最实用的那个。

但这两个payload都可以在我的Github中找到

Payload

Payload #2,正如上面提到Github中可以找到,执行下面操作上传Shell(一旦管理员进行执行):

1.GET请求了一个CFIDE管理页面来获取CSRF Token

2.POST请求了
/CFIDE/administrator/scheduler/scheduleedit.cfm与提交相关的参数

3.POST请求添加一个任务. 一个 CFML shell 已经上传到/CFIDE/update_cf.log

4.POST请求改变404和500样板来执行/CFIDE/update_cf.log

payload一旦成功执行,你可以在/404.cfm, /500.cfm或者构造404或500错误来访问你的ColdFusion shell。

payload输出诸如CSRF token,ColdFusion的完整安装路径以及用于调试的shell执行位置信息。下面这张截图显示管理员执行PoC之后的JavaScript控制台信息:

访问 URLs /404.cfm or /500.cfm将会返回引导进入后门Shell的登录页面,这个Shell配置的登录名为god密码为default。登录进去之后很有可能执行诸如任意命令执行,运行SQL查询,编辑文件,从服务器上传或下载文件等,后门的截图的界面如下图所示:

一旦攻击者成功进入Shell,内部网络就可能遭受破环,其也可以通过提升权限获取更多的信息。

结论

2015.4.26,Adobe已经成功修补该DOM型XSS漏洞,感谢Adobe安全团队的快速响应。

当设置应用程序时,坚持公司的指南十分重要,ColdFusion的这个漏洞就是一个很好的范例。遵循Adobe’s best practices(Adobe最佳范例)并确保ColdFusion管理面板不对外开放,如果不这么做,那么你得做好打下一个补丁的准备。

相关文章

移动端重构实战系列:0-4 章

(本文系来自腾讯imweb团队 结一大大 关于移动端重构经验以及思想的实战系列,推荐点击左下角的阅读原文。)”本系列教程为实战教程,是自己移动端重构经验及思想的一次总结,也是对sheral UI的一次...

一文彻底搞懂JavaScript前端5大模块化规范及其区别

在开发以及面试中,总是会遇到有关模块化相关的问题,始终不是很明白,不得要领,例如以下问题,回答起来也是模棱两可,希望通过这篇文章,能够让大家了解十之一二,首先抛出问题:导出模块时使用module.ex...

微服务架构实战:商城的用户登录与账户切换设计、订单查询设计

商城的用户登录与账号切换设计在移动商城的设计中,除商品和分类查询是完全开放权限的页面外,其他涉及个人隐私的个人信息、订单查询和购物车等都必须进行权限管理。有关用户权限管理的功能,在这里根据移动设备的特...

FastReport.Net v2016.6发布,添加打印对话框等新功能

新版本的FastReport添加了报表对象:PolyLineObject -中断曲线,PolygonObject-填充密闭多边形。除此之外,用户也能够通过移动、添加或者去除定位点来编辑已经准备好的对象...

CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)

像 px、em 这样的长度单位大家肯定都很熟悉,前者为绝对单位,后者为相对单位。CSS3 又引入了新单位:vw、vh、vmin、vmax。下面对它们做个详细介绍。一、基本说明1,vw、vh、vmin、...

学习web前端开发,需要掌握哪些知识?

可以按照我的教学框架学习,能都掌握也就满足企业目前的人才需求。一、PC端页面重构1、认知行业、岗位、部分专业术语,就业趋势与行业未来展望;2、HTML5核心元素及布局应用;3、CSS3核心属性及布局应...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。