设为首页
收藏本站
切换到宽版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
VIP用户组
官网群
无名商城论坛
»
论坛
›
资源分享区
›
学习资源专区
›
【限定72小时】web安全之反序列化漏洞
返回列表
发帖
查看:
240
|
回复:
0
[其他技术]
【限定72小时】web安全之反序列化漏洞
[复制链接]
无名
无名
当前离线
积分
32464
1万
主题
1万
帖子
3万
积分
管理员
积分
32464
发消息
发表于 2022-5-8 18:06:06
|
显示全部楼层
|
阅读模式
本教程转载网络,我只是个搬运工
首先要懂什么是序列化漏洞就要懂什么是序列化(好像再说废话[滑稽])
序列化:是将变量转换为可保存或传输的字符串的过程;
反序列化:在适当的时候把这个字符串再转换成原来的变量使用。
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访问:
本帖隐藏的内容需要
【资源会员】
才可浏览,您需要升级才可浏览,
点击这里升级【资源会员】
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文件。
序列化
,
函数
,
对象
,
触发
,
一个
相关帖子
•
【Max】团队~利用AIDE做个小应用=总结+AIDE教程结束
•
【LUR】入侵国外摄像头教程
•
【LUR】添加网站本地背景音乐各种播放模式
•
【LUR】非常实用!使用BootStrap实现布局~
•
【解忧】最全的JAVA知识汇总(附讲解和思维导图)
•
【DMT】教你们修改器如何播放音乐教程
•
SMTP邮件群发软件,支持163邮箱,谷歌邮箱,126邮箱等等...,QQ邮箱,
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表