------已搬运-------PHP反序列化之字符逃逸入门笔记

这个文章啊,前前后后改了三次了,每次是做题忘记了,然后复习,然后又有新的想法,便写下来了,
2021.4.5第三次修改

1.通用套路:

这里错了,后面闭合不一定总是;}还有可能是}具体看,
字符串的化,结尾是由分号的,其他如 对象,就不是分号结尾,直接是 右括号结尾

要记住的是: 字符逃逸的题,一定是 先 serialize(),然后 过滤(变多or变少),然后 unserialize() 。从而实现逃逸

不管字符增多 or 字符减少,套路一样,就是我们构造的都是 反序列化之后的字符串,比如s:4:"name";s:8:"flag.php"。这样的,并且,我们在当参数输入进程序的时候,前面 和 后面 都要闭合,比如:";s:4:"name";s:8:"flag.php";}。这样,不给别人添麻烦!

1. 字符数变多的时候

?name=hello,然后我们要进行字符逃逸,假设过滤会把6变多,变成xx ,我们输入?name=66666";s:4:"name";s:8:"flag.php";},然后serialize之后会变成这样a:2:{s:4:"name";s:53:"xxxxxxxxxxxxxxxxxxxxxx ";s:4:"name";s:8:"flag.php";}";},(个数不对,瞎写的,)。然后让xxxxx个数刚好是53个。这就实现了字符逃逸,

将我们构造的 反序列化字符串逃逸出来了,,最后过滤完,会进行反序列化,就达到我们的目的了。

2. 字符数变少的时候:

?name=adam&sign=hello,然后我们要进行字符逃逸,假设过滤会把666变多,变成xx,我们输入?name=66666666666666 & sign=";s:4:"name";s:8:"flag.php";}。serialize()之后变成s:4:"name";s:23:"xxxxx";s:4:"sign":s:25:"";s:4:"name";s:8:"flag.php";} ";}。将 我们构造的反序列化的字符串的序列化之后的一些信息给吃掉了,所以我们的反序列化字符串就逃逸了,然后进行unserialize(),实现目的
在这里插入图片描述

解释
缩水,变少。我们在缩水变量的后一个变量生成多余字符 把多余的字符 往前推。 从而增多字符个数,使得 缩水后 总的 === 刚开始的时候的
详细解释
我们想要构造成什么东西,就在相应的变量的位置上去构造相应的序列化之后的字符串(记得该闭合的都给闭合了)。当然,php会把他们再一次序列化,不过没事,我们就需要让前一个变量字符串数量缩水。从而把后面的一些不需要的字符给吸收了就好了。剩下我们输入时的那些。刚好反序列化出来我们想要的数据

2.基础知识和一些特性

知识
字符串逃逸是 一种闭合思想,类似于xss和sql万能密码一样,构造,然后闭合,绕过
序列化的值以 ; 作为字段分隔。结尾是 } 结束,并且是根据 长度 判断内容的
特性
PHP在反序列化的时候,类中不存在的属性也会进行反序列化。
当长度不对应的时候会报错。
分为两类:

  1. 过滤后字符变多
  2. 过滤后字符变少

1.过滤后字符变多

这是正常的时候

<?php
function text($str){
   
	return str_replace
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值