WEB渗透—PHP反序列化(一)

2023-12-13 04:03:21

Web渗透—PHP反序列化????????课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔哩_bilibili


一、PHP面向对象基本概念

1.程序开发:面向过程VS面向对象

面向过程

????????面向过程是一种以“整体事件”为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数

面向对象

????????面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个“对象”;对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。

2.类的定义

????????类是定义了一件事物的抽象特点,它将数据的形式以及这些数据上的操作封装在一起。对象是具有类类型的变量,是对类的实例。

内部构成:成员变量(属性)+成员函数(方法)

成员变量(属性)

????????定义在类内部的变量。

????????该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可成为对象的属性。

成员函数(方法)

????????定义在类的内部,可用于访问对象的数据。

继承:

????????继承性是子类自动共享父类数据结构和方法的机制,是类之间的一种关系。

????????在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把一个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

父类:一个类被其他类继承,可以将该类称为父类,或基类,超类。

子类:一个类继承其他类称为子类,也可称为派生类。


二、类与对象

类是对象的抽象,而对象是类的具体实例。

类是想法,把类实例化(new),调用具体值后就变成了对象。

1.类的结构

类:定义类名、定义成员变量(属性)、定义成员函数(方法)

class Class_Name{
    //成员变量声明
    //成员函数声明
}

2.类的内容

创建一个类:

class hero{                    //定义类(类名)
    var $name;                 //声明成员变量
    var $sex;                  //var是一种修饰符
    function jineng($var1){    //声明成员函数(方法)
        echo $this->name;      //使用预定义$this调用成员变量
        echo $var1;           //成员函数传参$var1可以直接调用
    }
}

3.实例化和赋值

$cyj=new hero();            //实例化类hero()为对象cyj?
$cyj->name='chengyaojin';   //参数赋值?
$cyj->sex='man';            //参数赋值
$cyj->jineng('zoufan');     //调用函数
print_r($cyj);              //打印对象cyj

4.类的修饰符介绍

在类中直接声明的变量称为成员属性(也可以称为成员变量)。

可以在类中声明多个变量,即“对象”中可以有多个成员属性,每个变量都存储“对象”不同的属性信息。

访问权限修饰符:对属性的定义

常用访问权限修饰符:

????????public:公共的,在类的内部、子类中,或者类的外部都可以使用,不受限制;

????????protected:受保护的,在类的内部、子类中可以使用,但不能在类的外部使用;

????????private:私有的,只能在类的内部使用,在类的外部或者子类中都无法使用。

类的内部

子类

类的外部

public

protected

×

private

×

×

class?hero{
    public??$name='chengyaojin';???????? //公有的
    private??$sex='man';?????????????????//私有的
    protected??$shengao='165';? ? ? ? ? ?//受保护的:内部、子类可用
    function?jineng($var1)?{
        echo?$this->name;
        echo?$var1;
    }
}

class?hero{
    public??$name='chengyaojin';????????????????????????????//公有的
    private??$sex='man';????????????????????????????????????//私有的
    protected??$shengao='165';? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //受保护的:内部、子类可用
    function?jineng($var1)?{
        echo?$this->name;
        echo?$var1;
    }
}

class?hero2?extends?hero{
    function?test(){
        echo?$this->name."<br/>"; ???????????????????????//public子类可用
        echo?$this->sex."<br/>";?????????????????????????//private子类不可用
        echo?$this->shengao."<br/>";?????????????????????//protected子类可用
    }
}
$cyj=?new?hero();
$cyj2=new?hero2();
echo?$cyj->name."<br/>";??????????????????????????????????//外部只可用public
echo?$cyj2->test();???????????????????????????????????????//子类内部可用public和protected

5.类的成员方法

在类中定义的函数被称为成员方法。

函数实现的是某个独立的功能;

成员方法实现的是类中的一个行为,是类的一部分。

可以在类中声明多个成员方法,成员方法的声明和函数声明完全一样,只不过在声明成员方法时可以在function关键字前加一些访问权限修饰符,如public、protected、private(可以省略,默认为public

<?php
class Stundents{
    var $name;
    public $age;
    private $sex;
    protected $school;
    protected static function Read(){
    }
    function Listen(){
    }
}
?>

文章来源:https://blog.csdn.net/haosha__demingzi/article/details/134448268
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。