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

前言

在现实的攻防中,往往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.mzph.cn/bicheng/65044.shtml

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

相关文章

高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容

预览 第1步&#xff1a;理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…

图书馆预约占座系统:数据驱动的座位分配机制

2.1 Java语言 Java语言是目前最流行的语言之一&#xff0c;不仅可以做桌面窗口形式的程序&#xff0c;还可以做浏览器访问的程序&#xff0c;目前最流行的就是用Java语言作为基础&#xff0c;做各种程序的后台处理。Java语言是操作变量的语言&#xff0c;而变量则是Java对于数据…

如何查看pad的console输出,以便我们更好的进行调试,查看并了解实际可能的问题。

1、以下是baidu AI回复&#xff1a; 2、说明&#xff1a; 1&#xff09;如果小伙伴们经常做android开发的话&#xff0c;这个不陌生&#xff0c;因为调试都是要开启这个开发者模式。并启用USB调试模式。 2&#xff09;需要连上USB线&#xff0c;有的时候会忘记&#xff0c;然…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

react中使用ResizeObserver来观察元素的size变化

在 React 中使用 ResizeObserver 来观察元素的大小变化&#xff0c;可以通过创建一个自定义 Hook 来封装 ResizeObserver 的逻辑&#xff0c;并在组件中使用这个 Hook。以下是一个完整的示例&#xff0c;展示了如何在 React 中使用 ResizeObserver 来观察元素的大小变化。 自定…

智慧社区电子商务系统:实现社区资源的数字化管理

2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

【Rust自学】6.2. Option枚举

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 6.2.1. 什么是Option枚举 它定义于标准库中&#xff0c;在Prelude&#xff08;预导入模块&#xff09;中&#xff0c;负责描述这样的场景…

【软件项目管理】-期末突击

区别常见的项目和活动 项目和活动的区别&#xff1a; 定义&#xff1a; 项目&#xff1a;为创造独特成果而进行的临时性工作。活动&#xff1a;日常运营中的重复性工作。 目标&#xff1a; 项目&#xff1a;实现特定成果&#xff0c;一次性。活动&#xff1a;维持日常运作&am…

OpenResty开发环境搭建

简介 OpenResty 是一个基于 Nginx的高性能 Web 平台&#xff0c;用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。官方地址&#xff1a;http://openresty.org/cn/ 具备下列特点&#xff1a; 具备Nginx的完整功能基于Lua语言进行扩展&#…

突发!GitLab将停止对中国区用户提供GitLab.com账号服务

突发!GitLab将停止对中国区用户提供GitLab.com账号服务 近日,被视为全球第二大开源代码托管和项目管理平台的 GitLab 宣布其将对中国区用户停止提供 GitLab.com 账号服务,建议现有用户迁移到极狐。中国 IP 地址现在访问 GitLab.com 页面会弹出下面窗口且直接转到 about.git…

【C++】ceil 和 floor 函数的实现与分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;ceil 和 floor 函数的基础介绍1. ceil 函数定义与功能示例代码输出结果功能分析使用场景 2. floor 函数定义与功能示例代码输出结果功能分析使用场景 &#x1f4af;自行实现…

合合信息:探索视觉内容安全新前沿

2024年12月13日-15日&#xff0c;中国图象图形学学会在杭州召开。大会期间&#xff0c;来自合合信息的图像算法研发总监郭丰俊进行了主题为“视觉内容安全技术的前沿进展与应用”的演讲&#xff0c;介绍了视觉内容安全问题&#xff0c;并总结了现今的技术发展&#xff0c;对我很…

【JetPack】Navigation知识点总结

Navigation的主要元素&#xff1a; 1、Navigation Graph&#xff1a; 一种新的XML资源文件,包含应用程序所有的页面&#xff0c;以及页面间的关系。 <?xml version"1.0" encoding"utf-8"?> <navigation xmlns:android"http://schemas.a…

教师如何打造专属私密成绩查询系统?

期末的校园&#xff0c;被一种特殊的氛围所笼罩。老师们如同辛勤的工匠&#xff0c;精心打磨着每一个教学环节。复习阶段&#xff0c;他们在知识的宝库中精挑细选&#xff0c;把一学期的重点内容一一梳理&#xff0c;为学生们打造出系统的复习框架。课堂上&#xff0c;他们激情…

.NET周刊【12月第3期 2024-12-15】

国内文章 重磅推出 Sdcb Chats&#xff1a;一个全新的开源大语言模型前端 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro Sdcb Chats是一个新推出的开源大语言模型前端&#xff0c;旨在提升用户交互体验&#xff0c;并填补市场上基于.NET的前端空白。它引入树状…

专栏二十三:Python读取和分析空间数据的经验杂谈

部分情况同样适合单细胞的分析结果 读取数据阶段 1.错误的library_id 包括sc和sq的两种读取方式&#xff0c;大同小异。 理论上有h5数据和spatial文件夹就可以读取成功&#xff0c;并且自动赋予和文件名一样的library_id&#xff0c;例如 slide sq.read.visium("/ho…

Pandas系列|第二期:Pandas中的数据结构

1.Pandas中的数据结构&#xff1a;Series和DataFrame Pandas 的主要数据结构是 Series &#xff08;一维数据&#xff09;与 DataFrame&#xff08;二维数据&#xff09;&#xff0c;这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。 Series 是一…

如何在谷歌浏览器中启用语音搜索

想象一下&#xff0c;你正在拥挤的地铁上&#xff0c;双手都拿着沉重的购物袋&#xff0c;突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索&#xff0c;那将多么的便利&#xff01;在谷歌浏览器中&#xff0c;启用语音搜索功能就是这么简单而高效&#xf…

GCP GCA认证考试Case错题库1(JenciMart+Helicopter+EHR)

GCP GCA认证考试Case错题库1(JenciMartHelicopterEHR) 整理by Moshow郑锴https://zhengkai.blog.csdn.net/ JenciMart 在生产和开发资源之间进行管理职责分离的最小权限模型中&#xff0c;最佳实践是每个应用程序的每个阶段都有自己的项目。这种设置确保权限是细化的&#xf…

MySQL HA 方案 MMM、MHA、MGR、PXC 对比

MySQL高可用架构 MMM (Multi Master Replication Manager) 资源数量说明主DB2用于主备模式的主主复制从DB0~N台可以根据需要配置N台从服务器IP地址2n1N为MySQL服务器的数量监控用户1用户监控数据库状态的MySQL用户(replication)代理用户1用于MMM代理端改变read_only状态 故障…