无名 发表于 2022-5-8 18:06:06

【限定72小时】web安全之反序列化漏洞

本教程转载网络,我只是个搬运工
首先要懂什么是序列化漏洞就要懂什么是序列化(好像再说废话[滑稽])
序列化:是将变量转换为可保存或传输的字符串的过程;
反序列化:在适当的时候把这个字符串再转换成原来的变量使用。
php序列化和反序列化函数
serialize()函数:可以将变量转换为字符串并且在转换中可以保存当前变量的值#用于序列化对象或数组,并返回一个字符串,serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变
unserialize():可以将serialize生成的字符串变回变量。
php进行序列化的目的:保存一个对象方便以后重用
序列化实例:
$this表示的是伪变量这里代指的是实例化对象。
序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字(上图是序列化之后的对象):O表示数据类型是对象,6表示数据长度(类名为6个字符),"Person"为类名,{}里面的是类的属性变量。显示的结果和前面的一样
反序列化实例:
把上面序列化过后的结果经过反序列化函数赋值给$pre,$pre就是一个实例化对象了。
php魔法函数
php类中包含了一些魔法函数,这些函数可以在脚本的任何地方不用声明就可以使用。
* 与php(反)序列化有关的魔法函数:
1. __construct():当一个对象创建时被调用#当创建一个对象的时候,会被自动调用该函数
2. __destruct():对象被销毁时触发#当销毁一个对象的时候会触发该函数。
3. __wakeup():使用unserialize时触发   #使用反序列化函数时会自动触发
4. __sleep():使用serialize时触发#使用序列化函数的时候会自动触发
5. __toString():把类当作字符串使用时触发#当把一个类当作字符串使用的时候,就会自动触发该函数
6. __get():用于从不可访问的属性读取数据#当从一个不可访问的属性中读取数据的时候,就会触发该函数
php魔法函数实例:
上面是一个魔法函数的实例,当Person类创建一个对象的时候,会自动调用__construct魔法函数,当echo 这个对象(也就是把类当作字符串使用)的时候,会自动触发__toString函数,当对象被销毁的时候(脚本执行结束了),就自动触发__destruct函数。
php反序列化漏洞原理:
* php反序列化漏洞又称为对象注入,可能会导致注入,远程代码执行。
* php反序列化如何产生:
1. 如果一个php代码中使用反序列化函数unserialize()去调用某一类,该类中会自动执行执行一些自定义的魔法函数,这些魔法函数中如果包含了一些危险操作,或者这些魔法函数会调用类中其他带有危险操作的函数,如果这些危险操作是我们可控的,那么就可以进行一些不可描述的操作
php反序列化漏洞代码实例1:
1. unlink():删除一个指定的文件。
2. dirname():返回路径中的目录部分
3. 上面的代码(1.php)中,delete类中定义了一个__destruct函数(销毁一个对象的时候会触发该函数里面的操作),该函数中会执行删除文件的操作。如果想利用该类来执行任意文件删除操作,则需要寻找一个可控的反序列化函数。
这个代码(2.php)把上面的1.php包含进去了,并且在最后一行
1. 有一个反序列化的操作。
* 如果有上面两个代码,而且也知道在该目录下面有一个1.txt文件。如果我们想删除这个文件的话,可以通过2.php里面per_serialized参数传入poc生成的payload,之后可以触发1.php里面的delete类,执行unlink函数,然后删除文件
poc代码:
经过poc可以生成一个对象test,且对象的属性变量为我们要操控的1.txt文件的序列化对象
1. 上面就是获得的一个序列化对象,之后就可以把这个序列化对象当作payload访问:http://127.0.0.1/2.php?per_serialized=O:6:"delete":1:{s:8:"filename";s:5:"1.txt";}
2. 查看www目录,发现1.txt被删除
* 实现经过:把poc代码中的对象delete实例化成为payload,然后通过2.php里面的per_serialized变量来进行参数的传入,2.php会对传入的序列化的payload进行反序列化。反序列化之后,会销毁poc里面的delete类,就会触发1.php里面的__destruct()魔法函数,删除文件。全程和2.php没有什么关系。
* 优先删除的是2.php文件当前目录里的1.txt文件。
http://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0LqAEEJwAAFbnkD5x7g19.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0LqAYeYQAADFEGH9yhk23.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0LuAUmfOAAFkkFPlN9g24.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0LyAT3U-AAEbzjYFs7U96.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0L2ADP0VAADBNzRG7Dk23.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0L2AevLuAADlnYl5y9472.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0L6AAZ2BAAD3dZNtxm020.jpeghttp://cdn.u1.huluxia.com/g3/M01/BD/17/wKgBOV5v0L-AVpwwAADsb7h4jTI87.jpeg
页: [1]
查看完整版本: 【限定72小时】web安全之反序列化漏洞