免杀对抗—Behinder魔改流量特征去除

news2025/4/6 14:34:41

前言

在现实的攻防中,往往webshell要比主机后门要用得多,因为我们首先要突破的目标是网站嘛,而且waf也往往会更注重webshell的检测。webshell的免杀分为两个,一是静态查杀,二是流量查杀。静态查杀不用多说了,匹配特征码特征值,流量查杀则是根据你webshell的流量特征来判断是否是恶意的行为。

实验环境

JDK1.8,Behinder V4.1

项目构建

老样子先对jar包进行反编译,这里分享一个在线反编译的网站。

Java decompiler online / APK decompiler - Decompiler.com

idea新建一个项目,叫Behinder,jdk建议选择1.8的,因为Behinder是以jdk1.8环境为基础运行的,防止后续的打包出问题。

在Behinder目录下新建一个目录名为lib,把未反编译的jar包拖进去,同时把已经反编译好的jar包解呀到Behinder目录下面。

点击文件 -> 模块 -> 点击依赖 -> 点击加号。

点击加号之后选择JAR或者目录,接着选择我们lib目录下jar包。

记得勾选上。

再来到工件这里,点击左上角的加号。

选择来自具有依赖项的模块。

主类选择后面.ui的,因为你打开一个软件最先显示的肯定是UI设计嘛,所以大多数主类也就是入口点都是xxxx.ui。

项目构建完毕。

流量特征去除

我们先来看看Behinder的原始流量特征,可以看到以下的几个字段都是特征来的。

Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Content-type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36

我们现在要修改这几个字段的内容,去除特征。直接搜流量的特征值,可以看到这个特征在Constants.java代码里面。

我们找到要修改的Java文件,右键->点击重构->选择复制,要复制到src目录下才行,因为这个目录是开发目录,记得路径要对得上!!!

src目录。

可以看到Accepts头的值和我们上述的流量特征一样,这里还有版本啥的代码。

修改Accepts头,还有版本号也一并修改掉。

点击构建->选择构建工件->所有工件。

然后会在out目录下生成一个jar包。

我们可以运行这个jar包,看看是否修改成功了,可以看到右下角版本变为我们修改的版本了。

Accept头也变了。

继续把剩下的特征也都去除掉,直接搜即可,在ShellService.java中可以找到剩下的特征。可以看到UA头不是写死的,而是通过this.getCurrentUserAgent()方法获取的。这是Behinder的一个特点,就是UA头是从它里面内置的十个中随机获取的。

去除特征修改如下。

重新构建一下,运行起来试试效果,可以看到特征全无了。

静态免杀

不知道是不是这个工具的问题,这个我没有搞成功,但还是记录一下。我们在传输协议这里生成webshell的时候,有多重加密方式可供选择,我们上面的数据包会有一段很长的编码,就是由Behinder内置的算法对webshell加密形成的。

如果我们用Behinder内置的算法的话,别人拿去解密那你不就炸肛了吗,Behinder支持自己导入算法,也就是说我们也可自己写一个算法导入进去。如果你不会写算法(我也不会),你可以叫AI帮你写一个,或者网上找一下。我这里找了一个网上找了一个把数据加密成XML的算法。

//加密
private byte[] Encrypt(byte[] data) throws Exception
{
String xml="<?xml version=\"1.0\"?><user><id>1</id><content>DaYer0</content></user>";
String key = "ffffcmldjt12138s";
String transformation = "AES/ECB/PKCS5Padding";

//创建加密对象

javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(transformation);

//创建加密规则
javax.crypto.spec.SecretKeySpec secretKeySpec = new javax.crypto.spec.SecretKeySpec(key.getBytes(), "AES");

//加密初始化
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE,secretKeySpec);

//调用加密方法

byte[] bytes = cipher.doFinal(data); 
String encode = java.util.Base64.getEncoder().encodeToString(bytes);

xml=xml.replace("DaYer0",encode);
return xml.getBytes();
}
解密
private byte[] Decrypt(byte[] data) throws Exception
{
java.io.ByteArrayOutputStream bos=new java.io.ByteArrayOutputStream();
bos.write(data,46,data.length-63);
String input = new String(bos.toByteArray());
//定义key(16位)
String key = "ffffcmldjt12138s";
String transformation = "AES/ECB/PKCS5Padding";
//创建解密对象
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(transformation);
//创建解密规则
javax.crypto.spec.SecretKeySpec secretKeySpec = new javax.crypto.spec.SecretKeySpec(key.getBytes(), "AES");
//解密初始化
cipher.init(javax.crypto.Cipher.DECRYPT_MODE,secretKeySpec);
//调用解密方法
byte[] bytes1 = java.util.Base64.getDecoder().decode(input);
byte[] bytes = cipher.doFinal(bytes1); 
return bytes;
}

接着我们新建一个加密方式。

把加密和解密的代码搞上去,如果校验通过则会显示保存成功,就是用你加密代码加密数据,然后再用你的解密代码还原得出来数据,就是校验通过。值得一提的是本地的加解密函数只能Java来写,想要导入其它的代码的加密函数可以选择远程。

保存之后我们点击分享,就会保存成为一个config文件。

在\net\rebeyond\behinder\resource\transprotocol目录下我们可以找到它存放的加密代码,也就是我们要把XML.config放到此目录下才行。

把目录transprotocol移到src目录下面,记得路径不要错,再把我们的XML.config复制进去。

重构项目,运行起来试试,可以看到我们的XML已经写入。

利用XML加密生成一个服务端连接试试,问题就出现了。显示连接失败,右下角显示解密错误,不理解为啥,校验的时候是通过的,而且这个Behinder自带的算法有好几个也是不行的,连接就报错说解密错误。不理解,有无懂的大佬解释一下。

最后就是重新编译一下修改过的代码文件,覆盖掉原来jar包里面的文件即可。

总结

这个冰蝎生成的webshell基本都连不上的,有没有师傅是和我一样的情况,妈的。不知道是这个工具的问题,还是我这里的问题,但是我直接从github下载直接用也是不行,哎。

最后经典语句收尾

以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter 异步编程简述

1、isolate 机制 1.1 基本使用 Dart 是基于单线程模型的语言。但是在开发当中我们经常会进行耗时操作比如网络请求&#xff0c;这种耗时操作会堵塞我们的代码。因此 Dart 也有并发机制 —— isolate。APP 的启动入口main函数就是一个类似 Android 主线程的一个主 isolate。与…

RAID5原理简介和相关问题

1、RAID5工作原理 2、RAID5单块硬盘的数据连续吗&#xff1f; 3、RAID5单块硬盘存储的是原始数据&#xff0c;还是异或后的数据&#xff1f; 4、RAID5的分块大小 ‌RAID5的分块大小一般选择4KB到64KB之间较为合适‌。选择合适的分块大小主要取决于以下几个考量因素&#xff1…

四、使用langchain搭建RAG:金融问答机器人--构建web应用,问答链,带记忆功能

经过前面3节完成金融问答机器人基本流程&#xff0c;这章将使用Gradio构建web应用&#xff0c;同时加入memory令提示模板带有记忆的&#xff0c;使用LCEL构建问答链。 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingF…

理解神经网络

神经网络是一种模拟人类大脑工作方式的计算模型&#xff0c;是深度学习和机器学习领域的基础。 基本原理 神经网络的基本原理是模拟人脑神经系统的功能&#xff0c;通过多个节点&#xff08;也叫神经元&#xff09;的连接和计算&#xff0c;实现非线性模型的组合和输出。每个…

Mac系统下 IDEA配置Maven本地仓库

1.为什么需要配置本地仓库&#xff1f; 在软件开发过程中&#xff0c;使用Maven工具进行依赖管理是常见的做法。Maven通过集中管理各种依赖库&#xff0c;能够帮助开发者在项目中轻松地引入所需的第三方库&#xff0c;并确保项目能够顺利构建和部署。然而&#xff0c;在使用Mav…

selenium学习笔记(一)

文章目录 前言一、selenium的简介java使用seleniumPython使用selenium常用的浏览器selenium的功能 二、chromeDriver的安装查看本机的chrome版本&#xff1f;匹配对应的chromedriver并下载在服务器上例如Centos如何安装Chrome 三、selenium内容详解chrome启动chrome启动参数元素…

MDS-NPV/NPIV

在存储区域网络&#xff08;SAN&#xff09;中&#xff0c;域ID&#xff08;Domain ID&#xff09;是一个用于区分不同存储区域的关键参数。域ID允许SAN环境中的不同部分独立操作&#xff0c;从而提高效率和安全性。以下是关于域ID的一些关键信息&#xff1a; 域ID的作用&…

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…

畅捷通-条件竞争

反编译dll 逻辑上很清晰了。取得上传数据然后直接写入Templates目录里去&#xff0c;且写入路径直接拼接文件名&#xff0c;说明写入路径可控。然后马上又调用Delete方法删除文件。看起来貌似很正常的样子&#xff0c;但实际上这里已经出现了严重的安全问题。首先是未限制上传…

web三、 window对象,延时器,定时器,时间戳,location对象(地址),本地存储-localStorage,数组去重new Set

一、window对象 window对象 是一个全局对象&#xff0c;也可以说是JavaScript中的 顶级对象 像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的 所有通过 var定义 在全局作用域中的 变量 、 函数 都会变成window对象的属…

VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

RK356x-11:在win11的WSL中开发SDK

我拿到的SDK建议开发的系统是Ubuntu22.04&#xff08;在SDK-docs中的文档有说明&#xff09;&#xff0c;因此&#xff0c;WSL中要先安装好它。由于PC机上WSL本身不支持aarch64架构&#xff0c;所以&#xff0c;进行ARM64的RK356X开发&#xff0c;需要手动加入支持。用到的支持…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

C语言(一)——初识C语言

目录 简单认识一段代码 数据类型 变量和常量 变量的作用域和变量的生命周期 常量 字符串 转义字符 注释 函数 数组 操作符 关键字 结构体 结构的声明 结构成员的类型 结构体变量的初始化 结构体传参 简单认识一段代码 main()函数是程序的入口&#xff0c;所以…

创新领先+效率领先,助力中国九牧加速品牌全球化

2024年&#xff0c;在全球市场经济和国家政策的双重驱动下&#xff0c;中国企业正在加速出海。 从早期粗放式的贴牌代工&#xff0c;到凝聚技术、产品、营销力的自主品牌出海&#xff0c;中国企业在国内市场对国际品牌上演过的追赶-超越戏码&#xff0c;如今正在海外市场上演。…

基于单片机的噪音检测系统(论文+源码)

1整体方案设计 2.2.1功能设计 本课题为噪音分贝仪&#xff0c;在功能上设计如下&#xff1a; 1.可以准确的识别周围环境的噪声大小。 2.检测的噪声大小可以通过液晶进行显示&#xff0c;并直观的给出当前噪声的程度大小&#xff1b; 3.可以通过按键设定报警阈值&#xff0…

十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)

目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump&#xff0c;俗称跑飞了。 参考cmbacktrace&#xff0c;在瑞萨RZN2L/T2M实现栈回溯&#xff0c;串口打印…

OpenAI推出“深思熟虑对齐(Deliberative Alignment)”:为大语言模型建立更可靠的安全与伦理框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

GitCode 光引计划投稿 | GoIoT:开源分布式物联网开发平台

GoIoT 是基于Gin 的开源分布式物联网&#xff08;IoT&#xff09;开发平台&#xff0c;用于快速开发&#xff0c;部署物联设备接入项目&#xff0c;是一套涵盖数据生产、数据使用和数据展示的解决方案。 GoIoT 开发平台&#xff0c;它是一个企业级物联网平台解决方案&#xff…

【鸿蒙(HarmonyOS)性能优化指南】启动分析工具Launch Profiler

Launch Profiler概述 DevEco Studio内置Profiler分析调优工具。其中Launch主要用于分析应用或服务的启动耗时&#xff0c;分析启动周期各阶段的耗时情况、核心线程的运行情况等&#xff0c;协助开发者识别启动缓慢的原因。此外&#xff0c;Launch任务窗口还集成了Time、CPU、F…