PHP序列化与反序列化

 

 O:表示这是一个对象
3:对象的名称Sel有3个字符
Sel:对象的名称
3:对象属性的个数
s:变量名数据类型为string
i:变量age的名字长度
*ss:变量名称(protected属性的变量名会在序列化时会在变量名前加上一个" %00*%00")
P rivate属性的变量名会在序列化时会在变量名前加上一个“ %00类名%00",

 

 例题  1

 打开后界面如下:

抓包查看index默认有一个post请求,func引用了date方法,查看当前日期时间对应Y-m-d h:i:s a

可以判断出func引用php函数,p则对应value。构造一下func=file_get_contents&p=index.php,来查看一下当前index.php的源码

可以看到过滤了很多不安全的函数,但是没有禁用反序列化函数unserialize,且存在一个class类:class Test

 

解题思路:
(1)目前Test并没有实例化,所以无法触发__destruct()
(2)解题目标是规避掉func的黑名单检查,所以需要利用call_user_func函数执行反序列化函数,从而创建一个Test实例,然后触发__destruct()函数
(3)利用其触发__destruct()后会将Test实例中的func值和p值传递给gettime,因为此前已经通过了黑名单检查,所以此时可以执行system等命令。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值