吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2208|回复: 1
收起左侧

[会员申请] 申请会员ID:baiheihei

[复制链接]
吾爱游客  发表于 2021-7-28 19:53
1、申 请 I D :         baiheihei                  
2、个人邮箱: youwen21@yeah.net
3、原创技术文章:  为什么反序列化漏洞在各语言具有普便性?

首先什么是序列化和反序列化。
简单描述如下:
序列化-把对象转换为字符串。
反序列化-把字符串转换为对象。

python, java, c++, php等各语言都支持对象序列化和反序列化, 但各语言采用的序列号协议不一样,所以序列化得到的字符串也不相同。
各语言支持序列化的数据类型都很丰富,如,字典,数组,列表,对象等都支持序列化和反序列化。

要理解各语言都有反序列化漏洞,是因为各语言支持对象的序列化和反序列化。

对象中可能包含socket句柄,或者文件句柄。
如mysql 连接, redis练级, sokcet客户端,打开文件读写等。
这些字段不是普通变量,需要和系统活者其他系统沟通才是一个有效资源。
所以,反序列化对象时,各语言都要调用魔术方法来实列化这部分资源。

各语言的定义:
php:
若被反序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。
python:
调用类的 __reduce__()
java:
调用类的readObject()

其他语言同理, 要支持对象中socket和文件的返序列化执行相方魔术方法!

如何利用反序列化漏洞?
反序列化字符串是通过 api入参获得:如get, post, cookie。
反序列化字符串是通过 redis、mysql等存储系统获得,我们具有update更新相关key的权限。

总之,我们生成新的将要序列化的字符串替换原字符串, 执行反序列时,__wakeup()  或 __reduce__() 或其他魔术方法执行时,就可运行我们注入的代码。

反序列化代码就罗列啦,网上搜一下不少,反弹shell,  获得数据等。

以下是案例中语言反序列化相关文档。
python 反序列化文档:https://docs.python.org/zh-cn/3/library/pickle.html
php 反序列化文档:https://www.php.net/manual/zh/function.unserialize.php
java 反序列化参考: https://paper.seebug.org/312/
以下为引用:
我们注意到 MyObject 类实现了Serializable接口,并且重写了readObject()函数。这里需要注意:只有实现了Serializable接口的类的对象才可以被序列化,Serializable 接口是启用其序列化功能的接口,实现 java.io.Serializable 接口的类才是可序列化的,没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。这里的 readObject() 执行了Runtime.getRuntime().exec("open /Applications/Calculator.app/"),而 readObject() 方法的作用正是从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回,readObject() 是可以重写的,可以定制反序列化的一些行为。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2021-7-29 10:38

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-13 14:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表