攻击目标是一个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密码密钥的一些分析和处理,下次再写吧。
本文始发于微信公众号(T00ls):老革命遇到新问题,简单说说一次Coldfusion攻击过程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论