反序列化漏洞篇
提示:所有渗透测试均是在授权情况下进行,漏洞已修复,且已经对敏感信息进行了脱敏处理,本文内容仅供参考学习,切勿模仿。
文章目录
前言
在身份验证,文件读写,数据传输等功能处,在未对反序列化接口做访问控制,未对序列化数据做加密和签名,加密密钥使用硬编码(如Shiro 1.2.4),使用不安全的反序列化框架库(如Fastjson 1.2.24)或函数的情况下,由于序列化数据可被用户控制,攻击者可以精心构造恶意的序列化数据(执行特定代码或命令的数据)传递给应用程序,在应用程序反序列化对象时执行攻击者构造的恶意代码,达到攻击者的目的。
一、反序列化漏洞原理
首先我们需要了解一下序列化和反序列化的含义:
序列化是指Java对象转化为二进制内容,转换的原因就是为了便于网络传输和本地存储。
反序列化的含义是将相应的二进制转换为Java对象。
漏洞成因:当输入的反序列化的数据可以被用户控制,那么攻击者就可通过构造恶意输入,让反序列产生非预期对象,同时执行构造的恶意代码
常用函数:(php反序列化)围绕:serialize()和unserialize()这两个函数展开
常用的魔术函数:
1、_construct() #当一个对象创建时被调用
2、_destruct() #当一个对象被销毁时被调用
3、_tostring()