[web] Web_php_unserialize

本文主要探讨了PHP中的Web_php_unserialize相关安全问题,包括反序列化绕过数字的技巧,如何绕过__wakeup()函数,以及serialize的特性和相关EXP的构建。通过增大对象属性的个数来破坏属性检查,实现对__wakeup()的绕过,并提到了在PHP 7中这一方法不再有效。同时,文章提到了对象序列化的具体格式和可能遇到的00截断问题。
摘要由CSDN通过智能技术生成

Web_php_unserialize


源码如下:
在这里插入图片描述
知识点:

1、__construct():当对象创建(new)时会自动调用。但在 unserialize() 时是不会自动调用的。(构造函数)
2、__destruct():当对象被销毁时会自动调用。(析构函数)
3、__wakeup():unserialize() 时会自动调用

4.  正则 : /[oc]:\d+:/i
	\d  是匹配一个数字
	+表示一个或多个
	i忽略大小写(修饰符)
	[xyz]字符集合,匹配所包含的任意一个字符(x,y,z)
	正则表达式中"/"是表达式开始和结束的标记
	
5. 	preg_match 返回1 / 0
	preg_match_all 返回 0/匹配次数
如 : preg_match("/php/i", "PHP is the web scripting language of choice.")
两个函数用法一样

flag在 fl4g.php

想到了正则表达式绕过, 但是就卡在这了.后面也没想到绕过正则后构造什么payload

这恰好是这题的两个考察点

反序列化绕过数字

"O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"

----> "O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}"

+号绕过

这里利用了 unserializer 的一个特性

具体可参考:

https://www.phpbug.cn/archives/32.html

https://www.guildhab.top/?p=990

绕过 __wakeup() 函数

参考:

CVE-2016-7124 https://bugs.php.net/bug.php?id=72663

创建对象之后 , 对对象的属性检查 , 若属性检查通过 , 就调用 __wakeup() 方法

若对象属性检查不通过 , 则会跳出 object_common2() 函数 , 不再调用 _

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值