当前位置: 首页 > news >正文

反序列化漏洞简单知识

目录:

        一、概念:

        二、反序列化漏洞原因

        三、序列化漏洞的魔术方法:

        四、反序列化漏洞防御:

一、概念:

        序列化:        

        Web服务器将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;

        例子:

        反序列化:

        Web服务器将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,HttpSession对象中的每个属性对象。
        PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。

二、反序列化漏洞原因:

        漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。

        漏洞原因:

        漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。
反序列化漏洞并不是PHP特有,也存在于Java、Python等语言之中,但其原理基本相通。

三、序列化漏洞的魔术方法:

        以_开头的的方法,是PHP中的魔术方法,在特定情况下会被自动调用:

        主要魔术方法及其触发条件如下:

        _construct():构造方法,当—个对象被创建时调用此方法.

        _destruct():析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法

        _autoload():使用尚未被定义的类时自动调用。通过此函数,脚本引擎在PHP出错失败前有了最后一个机会加载所需的类。

        _call( $method, $arg_array ):在对象中调用一个不可访问方法时

        _callstatic():在静态上下文中调用一个不可访问的方法时使用

        _clone():使用clone方法复制一个对象时

        _invoke():当尝试调用函数的方式调用一个对象时-

        __get( $property ):从不可访问的属性中读取数据

        _set( Sproperty, Svalue ):给一个未定义的属性赋值时调用

        _isset( Sproperty ):当在一个未定义的属性上调用isset()函数时调用此方法

        _unset( $property ):当在一个未定义的属性上调用unset()函数时调用此方法

        _tostring():在将一个对象转化成字符串时自动调用

        _sleep():序列化对象前调用(其返回需要是—个数组),详见补充说明

        _wakeup():反序列化恢复对象前调用,详见补充说明

        set_state():当调用var_export()时,这个静态方法会被调用

        _invoke():当尝试以调用函数的方式调用一个对象时,_invoke方法会被自动调用

        从序列化到反序列化这几个函数的执行过程是:

        _construct()->_sleep()_wakeup()->_tostring()->_destruct()

四、反序列化漏洞防御:

        1、严格控制unserialize函数的参数,坚持用户所输入的信息都是不可靠的原则;

        2、对于unserialize后的变量内容进行检查,以确定内容没有被污染;

        3、做好代码审计相关工作,提高开发人员的安全意识;

http://www.lryc.cn/news/324799.html

相关文章:

  • Es之正排索引与倒排索引
  • wordpress将图片默认连接到媒体文件
  • Java学习笔记 | Java基础语法 | 03 | 流程控制语句
  • 记录新人的web3之旅
  • 由浅到深认识Java语言(9):Eclipse IDE简介
  • 游戏引擎中的地形系统
  • 【论文精读】OTA: Optimal Transport Assignment for Object Detection(物体探测的最优传输分配)
  • 无极低码SQL模板引擎使用教程示例,自己手撸一个sql模板引擎进行动态sql生成。
  • Python学习(一)
  • Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用
  • 运动想象 (MI) 迁移学习系列 (14) : EEGNet-Fine tuning
  • java中获取字符串中满足正则表达式的元素集合
  • HTTPS总结
  • Linux之基础IO
  • 【SpringSecurity】十六、OAuth2.0授权服务器、资源服务器的配置(理论部分)
  • AtCoder Beginner Contest 346
  • Arduino智能家居
  • 吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式
  • Day56-LNMP架构扩展为集群模式实战精讲
  • Windows 设置多显示器显示
  • 语言模型的原理、实战与评估
  • 【Android 内存优化】Koom核心内存指标分析
  • Spring相关框架八股
  • RK3588开发笔记-v1.3.0-SDK文件系统分区添加
  • 架构评估方法相关知识总结
  • 常用ES标准
  • Http中Host,Referer,Origin和Access-Control-Allow-Origin
  • UDP实现聊天室
  • 排序算法:如冒泡排序、插入排序、选择排序、快速排序、归并排序
  • 深度学习pytorch——GPU加速(持续更新)