所有Yii2 版本 反序例化漏洞修复

什么是反序列化漏洞
      也叫PHP对象注入,漏洞形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。这个漏洞并不是PHP特有,在Java、Python其他语言也存在,原理基本相通。
 
比较典型的PHP反序化漏洞可能会用到的魔术方法
    1.void __wakeup(void)
    2.void __construct ([ mixed $args [, $... ]])
        具有构造函数的类会在每次创建新对象时先调用此方法。
    3.void __destruct ( void )
        析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
    4.public string __toString ( void )
    5.__toString( ) 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj;应该显示些什么。
 
 
漏洞利用过程
    1.有一个漏洞触发点 unserialize($_GET['input']);
    2.漏洞的效果取决于_destruct这个魔术函数内的操作
    3.构建poc.php,利用程序,先序列化后,从可控输入$_GET['input']输入进去。
 
原理
    1.通过serialize来修改类变量,因为serialize序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
    2.实际能达到什么效果,要取决于类中的魔术方法了。
 

Yii2 反序列化漏洞
受影响版本 < Yii2.0.38版本
    BatchQueryResult.php 文件中的BatchQueryResult类

所有版本
DiskKeyCache.php 文件中的Swift_KeyCache_DiskKeyCache类
RunProcess.php 文件中的RunProcess类

修复方案:
在类中加入以下方法
 

public function __sleep()
{
    throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
}

public function __wakeup()
{
    throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
}

参考以下网址:
https://github.com/yiisoft/yii2/security/advisories/GHSA-699q-wcff-g9mj
https://blog.csdn.net/he_and/article/details/108684623

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值