PHP反序列化漏洞

参考:https://cnblogs.com/xiaoqiyue/p/10951836.html

https://www.jb51.net/article/188446.htm

什么是序列化和反序列化?

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。

为什么要序列化?

更好的将数组或者是对象存储到文件或数据库中

注意: php序列化的时候 private和protected变量会引入不可见字符,%00类名%00属性名为private。%00*%00属性名为 protected,注意这两个%00就是ascii码为0的字符,这个字符显示和输出可能看不到,甚至导致截断,但是通过URL编码就可以看得清楚。

原理:

未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。

在反序列化的过程中自动触发了某些魔术方法。

漏洞触发条件unserialize函数的变量可控,php文件中存在可利用的类,类中有魔术方法

魔术方法:

__construct()当一个对象创建时被调用

__destruct()当一个对象销毁时被调用

__toString()当一个对象被当作一个字符串使用

__sleep() 在对象在被序列化之前运行

__wakeup将在序列化之后立即被调用

格式:

花括号内的格式即为
{变量1数据类型:变量1名长度:"变量1名称";变量1值类型:变量1值名长度:"变量1值名称";}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值