php的反序列化漏洞扫描,浅析php反序列化漏洞

反序列化在很多语言中都比较常见,下面简单介绍php的反序列化漏洞(对象注入)。

0x00.是什么

——what

php反序列化漏洞,又叫对象注入。

涉及到的是php中的两个函数:unsearialize()与serialize()。后者为将一个对象或者数组转换为字符串以便保存,前者则将尝试将字符串恢复为对象或者数组。

关于这个漏洞大家平时可能很少见,它的触发点主要是在代码审计中cms的session序列化与反序列化和ctf中相关反序列化字符串的构建。

执行方式是通过自动执行的魔术方法构造pop链,然后执行危险函数造成漏洞的产生。

0x01.为什么

——why

总结了一下整个流程:

unserialize()函数的参数可控 =>  实例化类  => 魔术方法自动调用 => 危险函数执行

1.魔术方法

魔术方法,magic method。魔术方法有各自的属性,类、对象进行各种操作时会自动调用。

常见的魔术方法如下:

魔术方法

属性

__construct()

构造函数,实例化对类时自动调用

__destruct()

析构函数,销毁对象时自动调用

__sleep()

序列化对象时自动调用

__wakeup()

反序列化对象时自动调用

__toString()

echo输出对象时自动调用

2.构造payload

定义一个测试类如下:

c34f5a8f0190c0e1869eaa567f5f959b.png

构造payload方法1:

f084cc7677c6995107f5f6c51ad8a4ab.png

构造payload方法2(推荐):

f5b0b86d45b881c9f5c8946a97d9e839.png

3.口算payload

示例:

5985a48a684819d44d27356d852ed55d.png

0x02.怎么做

——how

1.一些值得看一看的例子

cms漏洞:

1b3e75ec28093cd87ca65589abe92c69.png

ctf题目:

1b150d694d6ba43d87c0d8a8cd1b68ef.png

2.CVE-2016-7124

序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

例子:

4e870fc7539676bdfe7e4148452eedad.png

3.Session反序列化

session.serialize_handler(php反序列化处理器):

460cf93a3aea1b0e3533deed5f0e6541.png

使用方法:

49799973e132c25a71beb7dda7f5d5f0.png

关于这部分,有如下参考:

整个流程为:

反序列化与序列化处理器不同 =>

使用php_serialize处理器序列化,值中含有| =>

使用php处理器反序列化,格式为”键名|serialize()处理后的值” =>

|前解析为键名,|后进行反序列化

0x03.其他

本文转载自grt1st的博客

点击“阅读全文”,查看详情

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值