php从入门到进阶笔记 下 &&php反序列化漏洞的演示

前言

上一节我们学习到了 数组 这节我们将学习 面向对象 类 (属性 方法) 对象(对象的归类)魔术方法

偏实践多敲就能懂 :

1、面向对象

我们知道啊编程分为 面向对象的编程和面向过程的编程

那这两个是什么意思啊 --- 简单点说 就是我们敲代码开发一个程序 我们需要从数据库取出东西 呈现到前端页面 --- 面向过程就是 我们敲相同的代码(数据库连接)我们每换一个 程序就需要重新敲一遍 --- 而面向对象 就是我们在一个文件里 设置上一个类 需要调用的时候 直接调用这个封装的类(对象(object))就行了 不用 一遍一遍的去搞

不懂的可以看下边这个大佬的文章

什么是面向过程和面向对象,有什么区别?_面向对象和面向过程-CSDN博客

什么是类 和对象

我们 举个例子 类就是水果 而 对象就是苹果 香蕉

但是我们一开始不知道什么是香蕉啊 什么是苹果 啊 这就涉及到属性(定义的变量)

因为属性的不同我们才能区分

我们怎么区分的就是使用的 类的方法、​​​​​​PHP 面向对象 | 菜鸟教程

搞懂之后我们直接实践写一下

定义一个类 使用class 去定义 这边我们定义一个 fruit 水果

然后我们再给与属性 水果有什么属性啊 定义个大小 和名字吧

为什么用 public 定义呀 这个就涉及到 共有的(大家的大家都可以使用) 和私有的(我的)

解析:大家可能 不懂这个 -> 是干是什么的对吧 解析个 set_name吧 这个$this 我理解为预选的对象 对象的名字 是 name 这个name 其实就是我们输入的东西 这个方法就是跟我们互动 然后被调用

再解析一个 return 吧 这个 返回值就是 对象的名字 这下理解了吧 ->大家可以理解为 指向的

$this->name 对象指向的名字

哎呀这个太无聊了呀 提提兴趣 :

php序列化和反序列化

展示序列化 :

爱博士? 这不就是上边的面向对象(对象就是类实例化的结果)吗 那里的序列化啊

我们调用 一个函数 serialize(它可以吧我们的对象 转化为字符串) 那大家可能说了好好的对象转为字符串干什么呀 主要是我们的对象 new在外边 容易和类中断呀 那中断了对象不就什么也不是了 嘛

用一下这个函数:

然后再说一下 这个转换其实前边也了解了 就是 var_dump抓换数组的时候 是不是把数组当成和对象一样的形式输出了

那这个可以还原吗 这个需要使用 unserialize (反序列化 把字符串转变为对象)

我们还原一下试试

魔术方法

什么是魔术方法 : 这类就是 php本身自带的 当我们调用创建一些东西的时候就会 自动调用

就算我们没写(没写就会以默认值输出)(魔术方法简单点说就是为了更加完善 类 )PHP之十六个魔术方法详解 - The code - SegmentFault 思否

演示 __construct 和 __destruct

__construct(魔术方法都是以__开头) 这个的意思 简单点说 :就是我们创建变量的时候会给我们一个提示

__destruct 魔术方法 这个和上边相反 这个表示我们有属性被销毁的时候会默认进行

演示 :

反序列化漏洞

终于到漏洞了呀 你妹的呀 大家也可以看到 发现漏洞很简单吗? 不简单呀 你得需要有足够的知识储备呀 你得知道程序的逻辑呀

这边我们直接利用上边的演示 : 原理 就是序列化的魔术方法被更改 从而导致恶意代码被反序列化 -》

这边有个误区 就是我之后在调用新的对象 给新的值的时候 这个180 初始值 不会变呀 那这个函数实验不了 而destruct就可以 什么意思呢 就是destruct 是在序列化里最后输出的(这就保证了 初始值变化之后他的输出也变化) 而这个construct 是我们给之后后边的程序怎么干活 它鸟都不鸟一下

所以 反序列化很容易发生在 destruct 身上

那就好办了 我们如果拿到了这个源码 然后我们改一下 序列号对象的值再 反序列一下看看

我们运行一下

形成了 xss

实战:

pikachu 的反序列化

这里是这个漏洞

那我们把这个序列化给到这个pikachu 看看什么情况

返回了一个皮卡出 那就证实了呀 因为我们有源码 所以我们随便改值

后边那个 script忘记 写 / 闭合了

复制到皮卡出

直接X住了

这个漏洞的条件 : 1、 调用了面向对象 2、使用了会随着全局改变的魔术方法 3、我们得到了源码 4、使用了 unserilarize 返序列化

相关推荐
漂流瓶66666624 分钟前
Scala的模式匹配变量类型
开发语言·后端·scala
夏天吃哈密瓜29 分钟前
Scala中的正则表达式01
大数据·开发语言·后端·正则表达式·scala
2401_8337880531 分钟前
Scala的模式匹配(2)
java·开发语言
Lbs_gemini060332 分钟前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
ac-er88881 小时前
GD库如何根据颜色生成纯色背景图
开发语言·php
MarisolHu1 小时前
前端学习笔记-Vue篇-02
前端·vue.js·笔记·学习
悠悠龙龙2 小时前
框架模块说明 #05 权限管理_03
java·开发语言·spring
阿华的代码王国3 小时前
【算法】——前缀和(矩阵区域和详解,文末附)
java·开发语言·算法·前缀和
先知demons3 小时前
uniapp开发微信小程序笔记10-触底加载
前端·笔记·微信小程序·小程序·uni-app
B1nna3 小时前
外卖开发(三)开发笔记——AOP实现实现公共字段填充、主键回显、抛异常和事务管理
笔记