zoukankan      html  css  js  c++  java
  • 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值名称";}
    

      

  • 相关阅读:
    lists and Dictionaries
    捕获鼠标点击 位置移动
    Preventing and Event from Propagation Through a set of Nested Elements
    瀑布流
    Using Function Closures with Timers
    $.getJSON 的用法
    Overlay 遮罩层
    git常见问题
    spring 全局异常处理
    spring 事务
  • 原文地址:https://www.cnblogs.com/xiaobai141/p/14745371.html
Copyright © 2011-2022 走看看