冰蝎源码分析

本文详细分析了冰蝎的源码,重点讲解了其密钥协商过程,包括服务端生成128位随机数写入session、客户端不断获取key直至满足特定条件。客户端使用key加密动态生成的class字节数组,通过POST发送。核心代码位于net.rebeyond.behinder包内,涉及加密解密、payload执行、shell管理等关键功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冰蝎流程图如下:

冰蝎是先请求服务端,服务端判断请求之后生成一个128位的随机数,并将这个128位的随机数写入到session里面,并将这个128位的随机数返回给客户端,但是客户端并不会使用这个key作为之后的通讯的key,而是会继续重复上面过程,不断获取key,直到满足特定条件之后,才会确定是最终的key。客户端会保存这个key和响应报文里面的set-cookie的值。这个key就是之后客户端和服务端进行通讯的密匙。

获取key和保存cookie之后,获取服务端信息,执行命令,文件操作,数据库操作等都是使用这个key和cookie进行操作,对执行的代码动态生成class字节数组,然后使用key进行aes加密,再进行base64编码,并用post方式发送数据。接收服务端返回的数据时,先使用key进行解密,解密之后的数据一般是使用了base64编码,解码之后就可以获取服务端返回的明文数据。

反编译Behinder.jar包,其核心代码在net.rebeyond.behinder包内

冰蝎的原理为上传一个class字节码,通过调用classloader的defineClass方法,将class字节码,转换为Class。实例化上传的这个类,通过equal方法传递PageContext。获取到PageContext,间接获取到Request、Response、Seesion等对象。如HttpServletRequest request=(HttpServletRequest) pageContext.getRequest()

其核心部分是协商密钥getKeyAndCookie

客户端打开和服务端的连接之后,会先调用BasicInfoUtils类,在BasicInfoUtils类的getBasicInfo方法里,会调用ShellService的构造方法新建ShellService类。而在ShellService类里面的构造方法,会调用Utils的getKeyAndCookie方法。

Utils.getKeyAndCookie方法:

public static Map<String, String> getKeyAndCookie(String getUrl, String password, Map<String, String> requestHeaders) throws Exception {
        disableSslVerification();
        Map<String, String> result = new HashMap();
        StringBuffer sb = new StringBuffer();
        InputStreamReader isr = null;
        BufferedReader br = null;
        URL url;
        if (getUrl.indexOf
### 关于Ice Scorpion JSP一句话木马的信息 #### 原理概述 Ice Scorpion是一种基于Java的WebShell,通常被用于非法获取服务器控制权。这种类型的恶意软件通过嵌入到合法网站中的JSP文件来实现远程命令执行功能[^1]。 #### 检测方法 对于此类WebShell的检测可以从多个角度入手: - **静态分析**:检查源码中是否存在可疑特征字符串或编码模式。例如,寻找Base64加密后的payloads或是不常见的函数调用方式。 - **行为监控**:观察应用程序运行期间是否有异常网络流量、CPU占用率突增等情况发生;也可以设置日志审计机制记录所有HTTP请求参数并定期审查其中可能隐藏着攻击痕迹的数据流变化趋势图谱。 - **签名匹配**:利用已知的安全数据库对比当前环境内发现的新文件是否与任何已注册过的恶意样本相吻合[^2]。 #### 防御措施建议 为了有效抵御这类威胁,可以采取如下策略组合: - 实施严格的输入验证逻辑防止SQL注入等漏洞被利用作为上传途径; - 定期更新补丁修复官方发布的安全公告里提到的各种风险点; - 启用防火墙规则阻止来自不可信IP地址范围内的连接尝试; - 对重要业务系统的敏感操作实施双重身份认证提高入侵门槛; - 使用专业的WAF(Web Application Firewall)产品过滤掉大部分自动化工具发起的大规模扫描活动以及部分人工精心构造出来的复杂攻击向量[^3]。 ```java // 这是一个简单的示例代码片段展示如何进行基本的身份验证(仅为示意) public boolean authenticate(String username, String password){ // 此处应替换为实际的用户凭证校验过程 return "admin".equals(username) && "password123!".equals(password); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值