老革命遇到新问题,简单说说一次Coldfusion攻击过程

2015-04-15 10:19:47 18 3452


攻击目标是一个coldfusion9的系统,漏洞也算是比较老的一个漏洞了,后台管理登陆验证绕过的漏洞,顺利进入后台以后,感觉应该没有什么特别的地方了,结果实际攻击的时候遇到不少问题,中间的步骤还是挺曲折的,把攻击过程和大家简单分享以下,希望对大家有所帮助和启发。
coldfusion从后台拿shell的方法一般是利用后台的计划任务添加一个新任务,任务内容是到指定url(姑且叫A,是我们已经控制的肉鸡)读页面,将OUTPUT的内容存到本地(这个本地是对目标而言的本地,为了区分清楚我们成为B),这样webshell就在B上生成了.

人生不如意十之八,实际攻击过程中,发现计划任务执行了,webshell也生成了,也可以访问,但是总是脚本执行出错,查找原因的时候最开始怀疑是因为网络问题导致读取A页面出错,反复尝试后始终是这个问题,而在将A换成另外一台web服务器也不能解决问题,排除了网络问题造成,实在没有办法,怀疑是脚本的问题,于是另外找了一个cmd的webshell,这个shell上传后页面看起来也正常,但是一执行就出错,查看源码,

怎么会出现指定url的ip,去翻shell的源码
<form action="<cfoutput>#CGI.SCRIPT_NAME#</cfoutput>" method="post">   
<input type=text size=45 name="cmd" >   
<input type=Submit value="run">

这里的SCRIPT_NAME应该是目标B上的路径,却出现了A的地址,非常奇怪,感觉是CGI.SCRIPT_NAME被解析了? 所以代入了A的地址。这个非常奇怪,因为在A上面,脚本我是以txt形式保存的,为什么会被解析?理解不能,但是应该也是这个原因导致了前面第一个脚本上传后无法正常执行。神奇的是,当我为了写这篇文章去分析出原因的时候,居然又再无法重现当时的那个问题了。不过,好吧,解决方案倒是很简单,使用本地表单来提交,<form action="http://Bip地址/CFIDE/readme.cfm" method="post"> 这样来处理就ok了,

到这里基本的cmdshell完成了。但是cmdshell功能有限,上传下载功能都没有,必须另外传一个全功能的shell,因为对coldfusion的tags语法还是没信心,还是利用一些现成的shell吧,还是用一些技巧去解决问题吧,第一想到的办法是利用javascript的document.write,这样也许能绕过解析的问题,直接把整个shell都写到页面输出里,然后直接保存得到完整的正确的内容(这个在coldfusion的官方文档里有说明,cfm支持javascript语法),但是实际过程中读出的内容总是不太对,没有办法,只能利用cmd做文章,想到的办法是通过echo的重定向把shell直接写入到文件中,实际操作过程其实也是困难多多,因为@,’这些特殊符号在echo中都有自己的作用,必须将其转义,echo的转义是^,这个也是tmd是个体力活,最后做好的代码如下:

执行完成,用菜刀连接了下,成功
后面还有对coldfusion密码密钥的一些分析和处理,下次再写吧

关于作者

评论18次

要评论?请先  登录  或  注册
  • 18楼
    2015-7-27 17:28

    支持原创

  • 17楼
    2015-7-7 14:31

    如果:任务计划不能上传你怎么办

  • 16楼
    2015-4-16 13:49
    Twi1ight

    你这个问题我搞了这么多cfm倒是都没碰到过拿shell方法太多,你这个搞的太曲折了

    1
    daniel

    能否抛砖引玉的说下当计划任务不能访问外网,也就是说不能通过楼主所说的通过Url到A中下载的情况如何拿到权限?

    2
    Twi1ight

    9.02以下可以用公开的probe报错拿shell,还有我以前提过的日志包含(cf日志/iis日志),还有公开的一种datasource日志,非公开的就提一个probe吧,自己研究下应该可以搞定,通杀6-11的

    3

    文章分享下

  • 15楼
    2015-4-16 09:51

    不错,顶一下。

  • 14楼
    2015-4-16 09:17

    组件缺少的原因吧

  • 13楼
    2015-4-16 09:14
    Twi1ight

    你这个问题我搞了这么多cfm倒是都没碰到过拿shell方法太多,你这个搞的太曲折了

    1
    daniel

    能否抛砖引玉的说下当计划任务不能访问外网,也就是说不能通过楼主所说的通过Url到A中下载的情况如何拿到权限?

    2

    9.02以下可以用公开的probe报错拿shell,还有我以前提过的日志包含(cf日志/iis日志),还有公开的一种datasource日志,非公开的就提一个probe吧,自己研究下应该可以搞定,通杀6-11的

  • 12楼
    2015-4-15 23:40

    system echo一句话?

  • 11楼
    2015-4-15 21:48

    菜刀马体力活改了,要是连不上就下哭 哈哈

  • 10楼
    2015-4-15 21:16
    Twi1ight

    你这个问题我搞了这么多cfm倒是都没碰到过拿shell方法太多,你这个搞的太曲折了

    1

    能否抛砖引玉的说下当计划任务不能访问外网,也就是说不能通过楼主所说的通过Url到A中下载的情况如何拿到权限?

  • 9楼
    2015-4-15 20:21

    cf shell有时因为java等组件的原因导致过一些大shell执行错误。拿shell方法不止这些,cf的系统本身太TM多问题了。

  • 8楼
    2015-4-15 18:55

    @Twi1ight 把拿shell的办法说一些出来吧

  • 7楼
    2015-4-15 14:26

    菜鸟不是很明白,最后用菜刀链接成功,那么为什么不一开始就上传一句话。

  • 6楼
    2015-4-15 14:16

    还是喜欢上马。

  • 5楼
    2015-4-15 13:52

    没太看懂楼主描述的问题,说的是通过计划任务下载会被解析掉,导致脚本出现问题吗?然后通过post得到shell?然后再echo出来一个菜刀一句话?那为什么不直接post一个菜刀一句话上去呢?我没太看懂是不是这个。。。。

  • 4楼
    2015-4-15 12:23

    绕来绕去 我还是没看懂楼主的文章,不知道是不是我脑子很久不用了

  • 3楼
    2015-4-15 11:31

    写个ftp bat,wget vbs.system了 直接种个马 最方便

  • 2楼
    2015-4-15 11:26

    你这个问题我搞了这么多cfm倒是都没碰到过拿shell方法太多,你这个搞的太曲折了

  • 1楼
    2015-4-15 11:15

    还没搞过这套系统啊 ,学习了。