反序列化漏洞【1】

发布于:2024-05-16 ⋅ 阅读:(77) ⋅ 点赞:(0)

1.不安全的反序列化漏洞介绍

序列化:将对象转换成字符串,目的是方便传输,关键词serialize

a代表数组,数组里有三个元素,第一个元素下标为0,长度为7,内容为porsche;第二个元素下标为1,长度为3,内容为BMW;第三个元素下标为2,长度为5,内容为Volvo。

反序列化:将特定的字符串转换对象,关键词unserialize

反序列化成功

反序列过程可以进行xss、代码执行eval、文件包含include

2.类和对象概念

类:抽象的东西,归类

对象:具体的东西==把类 实例化就是对象

类型:类名的长度:‘类名‘:属性的数量:{s:4:"属性1 ";s:6:"值1";}

3.php类区别

介绍
public 表示全局,类内部外部子类都可以访问【随便改】
private 表示私有的,只有本类内部可以使用【不能继承】
protected 表示受保护的,只有本类或子类或父类中可以访问【只能使用不能修改】

类可以继承【父类子类】和覆盖,继承关键词extends,覆盖关键词public

4.魔法函数PHP

construct():在创建一个对象时自动调用的构造函数。可以用来初始化对象的属性或执行其他必要的操作。

destruct():在一个对象被销毁之前自动调用的析构函数。可以用来执行一些清理操作,如关闭数据库连接或释放资源。

get:在访问一个对象的属性不存在或不可访问时自动调用。可以用来动态获取或计算属性的值。

set():在给一个对象的属性值时自动调用。可以用来对属性进行过滤或验证,或执行其他必要的操作。

isset():在使用isset()函数判断一个对象的属性是否存在时自动调用。可以用来检测属性是否存在或是否具有特定的值。

unset():在使用unset()函数销毁一个对象的属性时自动调用。可以用来执行一些清理操作,如释放内存或删除临时文件。

call():在调用一个对象的不存在或不可访问的方法时自动调用。可以用来实现对象的动方法调用。

callStatic():在调用一个类的不存在或不可访问的静态方法时自动调用。可以用来实现类的动态方法调用。

toString():在将一个对象转换为字符串时自动调用。可以用来定义对象的字符串表示形式。

invoke():在将一个对象作为函数调用时自动调用。可以用来将对象作可调用的函数使用。

clone():在克隆一个对象时自动调用。可以用来执行一些必要的操作,如复制对象的属性或初始化新对象。

sleep():在将一个对象序列化为字符串时自动调用。可以用来决定对象序列化时需要保存哪些。

wakeup():在将一个字符串反序列化为对象时自动调用。可以用来恢复对象的状态或执行其他必要的操作。

set_state():在使用var_export()导出一个对象时自动调用。可以用来定义对象的导出行为。

debugInfo():在使用var_dump()或print_r()打印一个对象时自动调用。可以用来定义对象的调试信息。

5.php反序列化应用-文件包含

获取payload可先序列化后获得

源代码获取payload

若代码var后面是echo,可进行xss,若代码是写文件或包含效果,如require ,可进行文件包含,若代码存在eval,可进行函数调用

6.Java 反序列化漏洞--工具

php反序列化漏洞看代码,java反序列化漏洞需利用工具

7.反序列化漏洞防范