InsecureDeserialization(不安全的反序列化)

反序列化是将序列化的数据恢复成程序可用的数据,这个过程可能引发安全问题,如远程代码执行或权限提升。防御措施包括完整性校验(如JWT)、数据类型校验、详细日志记录和监控。HTTPS仅保护传输安全,不能防止反序列化攻击。实战示例展示了JBoss的反序列化漏洞利用。
摘要由CSDN通过智能技术生成

什么是反序列化?

有些时候我们需要把应用程序中的数据以另一种形式进行表达,以便于将数据存储起来,并在未来某个时间点再次使用,或者便于通过网络传输给接收方。这一过程我们把它叫做序列化。典型的例子是,用户数据被序列化后存储到数据库中,另一个例子是在Stateless架构下,用户登陆后的身份数据被序列化存储到了浏览器中。

在这里插入图片描述
反序列化和序列化是两个正好相反的过程。当我们要再次使用这些数据的时候,应用程序读取序列化之后的数据,并将其恢复成应用程序中的数据。例如服务器端从Redis中读出一个键值对,其内容是JSON格式的字符串,代表了某个用户的个人资料,并将其恢复成应用程序可使用的数据。
反序列化有什么安全问题?
尽管反序列化最严重可导致远程代码执行(RCE,Remote Code Execution),但最常见的反序列化安全问题却是通过修改序列化之后的数据字段,从而进行提权或越权操作。
举例来说,服务器端为了能快速横向扩展而被设计成了后端无服务状态架构,这也就意味着用户登陆后,其身份信息(例如用户ID,姓名,角色,登陆时间戳等)被保存到了浏览器cookie当中,在后续的请求里将会被自动发往服务器。
在这里插入图片描述
图:用户登陆后,服务器将用户身份信息存储在浏览器cookie中

存储于cookie中的这份数据的格式是应用程序自定义的,但攻击者通过探索尝试后发现,修改其中的某个字段就能将用户从普通用户修改为管理员。
存储于cookie中的原始数据:
Cookie: 3844998|AliceM|y|27|NU|active|null|201809
经过修改后的数据
Cookie: 3844998|AliceM|y|27|ADMIN|active|null|201809
由于缺乏对数据完整性的校验,服务器端在收到被修改过的这段数据后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值