php反序列化——字符逃逸增加

题目

 放到本地环境

 发现是这种情况:a:2:{i:0;s:1:"x";i:1;s:5:"aaaaa";}

分成两部分: a:2:{i:0;s:1:"x                           ";i:1;s:5:"aaaaa";}

现在需要做的就是自己构造第二部分:   ";i:1;s:6:"123456";}   一共20个字符

经过preg_replace函数  x->yy    增加1个字符

所以需要填入20个x,对应上面构造的20个字符 ( ";i:1;s:6:"123456";})

payload:xxxxxxxxxxxxxxxxxxxx";i:1;s:6:"123456";}

本地看看效果

 

 可以发现aaaaa已经变成了123456了

提交

 

 总结:

1、先本地环境打印出用到的变量,看看什么形式

2、从这个形式中分开,也就是找到要构造的那个变量(";i:1;s:5:"aaaaa";}),加上 "; 进行闭合前面的变量 

3、最后加上 ";}  闭合构造的变量,使得后面的内容失效。

失效的原因是:反序列化是以这个;}来作为结束标志的,但也不完全是,前提是前面的成员属性数量一致,成员属性名称长度一致,内容长度一致,只有在这个前提之下,;}才会被当作结束的标志

而我们前面已经满足了成员属性数量一致,成员属性名称长度一致,内容长度一致。

 

posted @ 2024-04-01 17:22  Xuraniiiz  阅读(41)  评论(0编辑  收藏  举报