6月17号,某牛在朋友圈发了消息:
史上最牛逼的中国菜刀即将发布,过市面上所有的 waf,而且把 webshell 玩到让你瞠目结舌的境界
当时有消息声称 6 月底将会发布新版菜刀。
果然在 6 月 20 日,原本已经关闭的 maicaidao.com
又开放了,而且下载量瞬间就到了 660 +。
话不多说,下载一个体验一波到底有多牛逼。文章发布时站点又关闭了,具体原因不得而知。
注意:菜刀的唯一官网是: www.maicaidao.com
下载后解压,密码是 www.maicaidao.com
具体的信息来源参考 readme.txt。
文件说明
caidao.exe 菜刀程序
db.mdb 菜刀的主数据库
caidao.conf 配置文件(重要,千万别删除)
cache.tmp 菜刀的缓存数据库(可删除)
readme.txt 说明文档(可删除)
ip.dat 一个IP库,用于IP地址识别(可删除)
<CCC>
菜刀的自写脚本目录(可删除)
<Customize>
Customize模式的服务端(可删除)
我们可以发现,新版本中多了 caidao.conf
,这个配置文件,这个文件作者自己的评价是重要,千万别删除
。而药丸君觉得这个看似小小的一个改动,甚至可以让中国菜刀起死回生,过 waf。
我们知道,菜刀的源代码不是公开的,自从停止更新以后,各种 waf 都对其数据包进行了里三层外三层的分析。在那个年代里,想做到过 waf,通常有下面这几种做法:
过 waf 一句话。通过变形,混淆一句话 webshell 逃过检查。(然后就出了对请求进行分析的 waf)
反编译修改发包特征过 waf。这种方法成本相对比较高,你要会逆向呀,然后还有个尴尬的问题就是你能改的地方实在是有限。
中转脚本修改数据包过 waf。这种方法应该是用菜刀过 waf 用的最多而且方便的了。但是你得要开一个中转的 web 服务,我的尴尬症又犯了。
正是因为有诸多不便,加上菜刀本身不能跨平台,近些年开源的 webshell 管理工具层出不穷,典型的有药丸朋友蚁逅开发的 AntSword
使用 nodejs
与 ES6
开发,跨平台,并且开源。以及 Altman
,使用 C#
开发,支持跨平台,源代码也已经在 github 开源。还有 Java
开发的开源 webshell 管理软件 Cknife
。诸如此类软件相当之多了。
好吧,来跟药丸君一起看看如何玩转这个 caidao.conf
吧。
caidao.conf
对,我得事先解释一下,菜刀能过 waf 的前提,是你需要会改这些配置,不然,你手里的只能是生锈了的菜刀。
<FLAG>
返回的内容分隔符,只限三个字符。我们知道原来的分割符是
->|
与|<-
, 有些 waf 会拦截这个字符,所以,我们可以用生辟点的字符,比如说~>$
。<UA>
定制 HTTP 请求中的 User-Agent 部分,我们看到默认的
caidao.conf
中将 UA 改成了百度蜘蛛的 UA, 当然你可以改成 Google 的嘛。有些时候需要改改,大部分情况下这个参数可以不用改。<K1>
与<K2>
POST的参数名称,默认情况下, K1 是 z1,K2 是 z2。一般情况下,waf 是不会拦这个,所以可以不用改。
<PHP_BASE>
,<ASP_BASE>
,<ASPX_BASE>
,<PHP_BASE.加密示例>
这4个是webshell的基础代码部分,所有的功能代码都会发到这里进行组装,然后发送到服务端去。这里基本不用改,但是如果你服务端的 webshell 做了一层加解密操作,比如服务端代码是这样的
<?php @eval(base64_decode($_POST['caidao']));?>
那么,你就可以在这里修改配置为<PHP_BASE.加密示例>eval(base64_decode($_POST[id]));&id=%s</PHP_BASE.加密示例>
。可以负责任的讲,免杀,过 waf 大部分都是在这里作文章的,后面基本都是一些功能函数,waf 是不会杀的,他要是敢杀,就证明他的业务中不需要那类操作。
这里就有意思了,你想,以前的菜刀只有一个
base64_decode
那现在,你就可以随便改了,比如说,你用hex
, 再比如你可以用凯撒密码,又或者是栅栏密码,再过分点,你可以用 AES, DES,最过分的就是自己写一个加密解密的算法。那样 waf 想拦就很尴尬了。(作者说的过 waf 大概就是这层意思吧)<GETBASEINFO>
获取基础信息的功能代码。比如你添加完 shell, 直接去虚拟终端,一进去就会显示当前路径,当前用户,系统类型什么的这些。
<SHOWFOLDER>
文件目录查看功能代码。这里主要就是用户传进来一个路径,然后把这个路径下的目录,文件全都显示出来,包括一些属性,比如文件时间,权限,类型等。
<SHOWTXTFILE>
查看文件内容,编辑文件也首先调用的就是这里。
<SAVETXTFILE>
保存文件。
<DELETEFILE>
删除文件。
<DOWNFILE>
下载服务器文件到本地。
<UPLOADFILE>
上传文件到服务端。
<PASTEFILE>
粘贴文件。
<NEWFOLDER>
新建目录。
<WGET>
从远程下载一个文件到服务器。
<SHELL>
执行系统命令,这里比较尴尬的地方,就是相关函数被干掉的话,基本是没戏。
<RENAME>
修改文件名称。
<SETTIME>
修改文件时间。
其它的就是一些数据库的功能代码了,我实在是不想写了,就那几个单词,百度翻译都知道是什么意思,我就不翻译了哈。
过 WAF
虽然我上面已经提到了一些过 WAF 的点,不过为了凑字数,我还是在这系统总结一下。
这里就不得不提到一些 WAF 的特性了。
基于正则类 waf
这一类的 waf,太好绕了,可以说,你都不用改菜刀的配置就可以做到,比如你把一句话
base64
一下,再base64
一下, 这就绕过去了。如果他查你的 Request, 那你就把<PHP_BASE>
这里随便改改就能像过大街一样过 waf 了。比如 xxx 狗。基于hook机制的 waf
比如 PHP 中,诸如
eval
,create_function
,preg_replace
,assert
等能够将 string 以脚本代码执行的函数都会经过脚本层的 APIcompile_string
。这类的 waf 从底层 hook 了这个 API, 如果有脚本调用了该 API,直接干,往死里干,不解释,一般情况下正常的网站都不会用这些个功能,如果真的有,那就走白名单就行了。所以一句话要怎么过这种的 WAF 呢?想啥呢,还想用一句话?你要是能挖一个 PHP 的本地代码执行漏洞,那你直接上远控就行了还用一句话?所以这类 waf 要怎么用菜刀连? CUSTOM 类型呀。CUSTOM 类型的webshell,你完全可以理解成一个大马。只是输入输出用菜刀去解析了而已。这时一些功能代码都是直接在服务端的,所以不用经过
compile_string
这个 API,所以可以正常使用。但是要想执行system
命令的话,那就是另一回事了。ahahaha,再提一句,这个功能是旧版菜刀支持的。这类的 WAF 典型的比如 D 盾。
总结一下,所以 WAF 分为两类,一类是随便过的,一类是过不了的,:)。
有关菜刀后门
菜刀自从被曝有后门之后,大部分的人都不再相信爱情了。太可怕了,黑吃黑。这也是不少人放弃使用中国菜刀转投自己开发自己的 webshell 管理工具的原因。
经过某牛检测过的,最近几个历史版本中无后门的菜刀 hash 如下:
1 | 文件: caidao-20100928.exe |
这一次菜刀将所有发包功能使用配置文件形式,在很大程度上是解决了后门的问题。
没错,以后你想要求过xxx的菜刀的时候,不需要再去拷整个文件了,直接求一个过xxx的配置文件就行了。
那么问题来了,这样真的就没后门了吗?
显然不是
可以杜绝菜刀主程序没后门,但是,配置文件里面可以做点手脚呀。我举个例子哈,比如我给 <wget>
中加入一段后门代码,当你执行 wget 的时候,会把 shell 信息发送到我后门服务器。
你会说,谁有那么傻逼呀,一看就看出来了。
真的是这样吗?讲道理,安全从业者大部分的人都不会写代码,连简单的正则过 waf 什么的都不会,你还指望他能看懂多少行代码,再加上编码混淆一下什么的,画面太美我不敢想。以前的菜刀,为了加后门,必须得逆向,而且受长度限制,现在使用配置文件了,加后门什么的,更方便了,也更难查了。
最后打个广告,蚁剑 2.0 会在近期发布,为极客定制,如果你到现在都不懂 Webshell 的原理的话,还是建议你花点时间学一学基础,不会有害的〜