PHP反序列化常用方法
常用绕过正则方式:
将o:数字或c:数字改为O:+数字或C:+数字
preg_match(‘/ctfshow_i_love_36D/’,serialize($_GET[‘ctfshow’]))
使用提交:ctfshow_i_love_36D即可
在反序列化中,可以修改值,但不能改变逻辑方法,因为在序列化后不会替换其函数的逻辑方法。
逃逸的绕过
针对逃逸类的反序列化,可使用替换绕过的方式比如
由str_replace(‘fuck’, ‘loveU’, serialize($msg));可知替换后多了一个字符,原来的序列化为:
触发替换后的序列化为:
可使用逃逸的方法直接替换掉后面的属性:
针对简单的MD5两个判断绝对等于:
这种可以使用在初始化的时候,让内存地址相等的方法,使其绝对等于;
修改: $this->password =
this->password = &$this->token;
针对正则判断后停止或报出错误,而利用点在销毁方法上的。可以把序列化的结果破坏进行提交绕过:
序列化的结果:O:7:“ctfshow”:2:
可以使用O:7:“ctfshow”:2:{}尝试进行绕过
绕过wakeup的办法:
用序列化加%00
private:属性被序列化的时候属性名会变成%00类名%00属性名
,长度跟随属性名长度而改变。加%00的目的就是用于替代\0
评论