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反序列化漏洞需利用工具