代码编织梦想

什么是反序列化漏洞
      也叫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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/glfxml/article/details/110086299

根据城市名称查询最近天气状况-爱代码爱编程

/** * 天气 * @param string $city * @return array */ public function weather($city = '合肥') { //天气接口URL $urls = "http://wthrcdn.etouch.cn/

php 网址运行时配置-爱代码爱编程

目录 //正常情况下错误开关设置 //memory_limit  php最大内存   //正常情况下错误开关设置 error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); ini_set('display_errors',0); //决定错误是否再页面展示 生产环境不建议开启 ini_

PHP对接抖音小店接口的简单封装以及请求-爱代码爱编程

简单分享一下PHP对接抖音小店的方法   首先需要配置一些公共的参数  踩到不少坑,需要有一起开发的互相学习。 protected $app_key = "app_key"; // 你的key protected $app_secret = "app_secret"; // 你的secret protected $app_url =

支付宝异步通知接收不到,完全没有发送异步通知排查,http0-爱代码爱编程

前言:因为支付异步通知问题,排查了一天,自己模拟各种请求都能到达服务器,地址没问题,唯独支付宝的支付成功异步通知,服务器从没收到过,log一行都不会出。 异步访问状态http0排查方案 设置异步地址要求为外网post访问为http0,可通过【云排查】查询。查询当前支付订单的通知信息,内有同步和异步的回调地址明细 当异步地址访问返回http0,为商户自

php 导出Excel 字符过长科学计数法-爱代码爱编程

在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号。 使用PHPExcel来生成excel,也会遇到同样的问题,解决方法有三种: 设置单元格为文本 $objPHPExcel->getActiveSheet()->getStyle('S'.

laravel MySQL连表查询on支持多条件过滤-爱代码爱编程

项目场景: laravel连表查询需要在第二张表加多个过滤条件 原因分析: sql错误方式 , 加where a.isMaster = '1’会直接影响user表 select * from `users` as `u` left join `appointment` as `a` on `u`.`id` = `a`.`userId` where