web安全-反序列化漏洞

web安全-反序列化漏洞,第1张

java在开发过程中,需要先编译再执行,所以和javascript这种可以随时插入代码运行的语言不同,java这种先打包再运行的高级语言确实看起来更安全。

所以个XSS攻击通过直接插入代码的方法不同,反序列化漏洞是要在已封装好的代码中插入攻击逻辑。

序列化:开发应用时,应用输出数据会转化成字符串或字节流。

1.将某个类序列化后存为文件,下次读取时只需将文件中的数据反序列化就可以将原先的类还原到内存中。也可以将类序列化为流数据进行传输。总的来说就是将一个已经实例化的类转成文件存储,下次需要实例化的时候只要反序列化即可将类实例化到内存中并保留序列化时类中的所有变量和状态。

2.对象、文件、数据,有许多不同的格式,很难统一传输和保存,序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东西,就可以进行通用的格式传输或保存,传输结束以后,要再次使用,就进行反序列化还原,这样对象还是对象,文件还是文件。

反序列化:应用将字符串或者字节流变成对象。

序列化和反序列化的实现方式:开发过程中使用一些序列化和反序列化的工具,比如 Fastjson 和 Jackson 等,还有 XML 和 JSON 这些跨平台的协议,可以把对象转化为带格式的文本,把文本再还原为对象。

反序列化漏洞是怎么产生的:问题就出在把数据转化成对象的过程中。在这个过程中,当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。而黑客正是利用这个逻辑,在数据中嵌入自定义的代码(比如执行某个系统命令)。应用对数据进行反序列化的时候,会执行这段代码,从而使得黑客能够控制整个应用及服务器。这就是反序列化漏洞攻击的过程。

反序列化漏洞利用的过程:

1、黑客构造一个恶意的调用链,并将其序列化成数据,然后发送给应用;

2、应用接收数据。大部分应用都有接收外部输入的地方,比如各种 HTTP 接口。而这个输入的数据就有可能是序列化数据;

3、应用进行反序列 *** 作。收到数据后,应用尝试将数据构造成对象;

4、应用在反序列化过程中,会调用黑客构造的调用链,使得应用会执行黑客的任意命令。

举例:我从事的公有云研发工作,在软件架构上,用户侧通过发起openapi调用底层软件逻辑实现创建计算、网络资源等 *** 作。实际上,对外暴露openapi的组件不承担真正的job,在openapi下会通过innerapi给不同组件分发不同job,如用户侧发起创建一个虚拟机的动作后,openapi组件将其转换成任务流,任务流中包括调度cpu、内存、创建网卡、创建云盘等具体任务,这些任务由不同的innerapi组件完成。

这个逻辑中有一个关键的点,所有的工作流初始形成后会马上缓存到redis,各组件在redis中订阅自己的job,这就会涉及到业务内部逻辑对象(比如创建一个虚拟机这个任务)到redis支持的数据结构之间的转换,即序列化,当所有任务在redis中执行完后,由计算节点读取jobs的执行结果,将数据库中的结果转换成软硬件资源的配置(比如reids中写cpu:2,内存:4G,计算节点会依据此数据转换成配置命令完成资源的实际配置),这个过程就是反序列化。

但如果,攻击者越过此逻辑,直接对接受序列化数据的api传入参数,比如 /一段序列化参数/+攻击者构造的逻辑代码,此时接收方也确实不做过滤 *** 作时,就会执行反序列化之后的代码,导致服务器被攻击。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/925960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存