反序列化漏洞

作者 : admin 本文共2336个字,预计阅读时间需要6分钟 发布时间: 2024-06-6 共2人阅读

概念

序列化(
serialization
):讲数据结构、对象等状态转化成可使用的格式(一般用于:缓存、网络发送、身份信息等),以备能够被还原为原始状态;

序列化
&
反序列化功能一般用作:存储、传输;

反序列化
(unserialization)
:和上方相反

反序列化漏洞插图

什么是类:

类是有相同属性和操作的一组对象的集合;

什么是对象:

对象是一个信息获取信息处理描述组成的整体,是对现实世界的描述;

对象是类的实例:

完整案例:


输出结果:
O:7:"student":3:{s:4:"name";s:8:"zhangsan";s:3:"age";i:8;s:3:"sex";s:4:"male";}

O
表示
object
,
数字
7
表示
‘student’
的长度,数字
3
表示属性数量,大括号内
{

s
表示
‘string’

4
表示字符串长度,
‘name’
表示名称
}

<?php
//创建类
class student{
public $name="zhangsan";
public $age=8;
public $sex="male";
public $bur=false;
public $gir=1.111;
public $arr=array('a','b','c');
private $name2="zhangsan";
protected $name3="zhangsan";
}
//创建对象
$Student=new student();
var_dump($Student);
echo "
"; //序列化对象 $str=serialize($Student); //打印 var_dump($str); echo "
"; //将序列化的字符串,反序列化 $unstr=unserialize($str); //打印 var_dump($unstr); ?> object(student)#1 (8) { ["name"]=> string(8) "zhangsan" ["age"]=> int(8) ["sex"]=> string(4) "male" ["bur"]=> bool(false) ["gir"]=> float(1.111) ["arr"]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } ["name2":"student":private]=> string(8) "zhangsan" ["name3":protected]=> string(8) "zhangsan" } string(230) "O:7:"student":8: {s:4:"name";s:8:"zhangsan";s:3:"age";i:8;s:3:"sex";s:4:"male";s:3:"bur";b:0;s:3: "gir";d:1.111;s:3:"arr";a:3: {i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}s:14:"studentname2";s:8:"zhangsan";s:8:"*n ame3";s:8:"zhangsan";}" object(student)#2 (8) { ["name"]=> string(8) "zhangsan" ["age"]=> int(8) ["sex"]=> string(4) "male" ["bur"]=> bool(false) ["gir"]=> float(1.111) ["arr"]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } ["name2":"student":private]=> string(8) "zhangsan" ["name3":protected]=> string(8) "zhangsan" }

常见数据类型序列化后样式:

bool-------->b:value 例:s:3:"bul";b:0;=========>$bul=false
string------->s:count:value 例: s:4:"qwer";s:4:"qwer"; =========>$qwer=qwer
int---------->i:value 例:s:2:"in";i:8; ========>$in=8
Object------->O:::属性数量; 例:O:3:"res":2:
array-------->a:3:{i:0;i:1;i:1;i:2;i:2;i:34}============>array(1,2,34)

private
属性序列化后格式:
%00
类型
%00
成员名;

protected
属性序列化后格式:
%00*%00
成员名;

public
属性无特例
;

php7.1+
反序列化的类属性不敏感;

魔术函数:

php
中自定的功能、方法;
php
中魔术方法以
‘——’,
两个下划线开头,魔术函数无需调用,只需要满足特定条件即可触发;

__wakeup
()
,反序列化时被执行

__sleep
()
,序列化时被执行

__construct
(),
对象被创建时执行

__destruct
(),
对象被销毁时执行

例:

反序列化+魔术函数

name);
}
}
$a=$_GET['a'];
unserialize($a);
?>
用户可操作参数传入序列化字符串,且被反序列化函数处理
payload:
O:5:"pussy":1:{s:4:"name";s:10:"phpinfo();";}

反序列化漏洞插图(1)

反序列化漏洞成因:

①有
unserialize&serialize

②魔法函数;

③用户控制输入;

php
反序列化常见于
ctf
代码审计中;

java
反序列化常见于组件、框架(
weblogic

shrio

struct2
);

本站无任何商业行为
个人在线分享 » 反序列化漏洞
E-->