每一天都是新的一天,每一天都会接管新的信息,每一天都会有新的发展,昨天接到一个付费咨询,一贯到晚上睡前才记起来,客户是一个大一学生,参加了大学的网络安全社团,然后碰着了一道题目,想乞助我帮忙办理~

这题稽核的是PHP反序列化,还有工具的布局函数和析构函数,算是Web安全入门题,有兴趣和想法的小伙伴,可以在知乎平台购买Web安全三册,比京东便宜一点,本着助人为乐的精神,就帮助这位小兄弟剖析一下~

Web安全三册:web安全攻防 渗透测试实战指南+Web安全

PHP文字倒排函数PHP反序列化入门题 HTML

知乎自营

¥185.00

去购买

隐蔽中

首先是创建一个Test工具然后序列化紧接着echo输出:O:4:"test":1:{s:1:"a";s:4:"test";} (序列化)接下来是接管一个str参数(GET要求)再之后反序列化结束调用析构函数

我们可以先看看这个序列化:O:4:"test":1:{s:1:"a";s:4:"test";}

O:4是工具名称长度是4 (test)1是 工具有1个属性s:1 表示字符长度是1(属性是a)s:4 标识字符长度是4(属性a的值是test)

这里的核心是Test工具里面的方法

__wakeup:咱们要绕过这个反序列化触发的方法,后面剖析__construct:布局函数,这时候变量a=test__destruct:析构方法,如果变量a=flag,咱们就成功了

当我们要求这个网址的时候,由于反序列化,先调用__wakeup方法,导致变量a=NOflag,那么末了析构的时候,由于不知足a=flag,导致我们拿不到结果~

那么我们的思路便是如何布局要求参数str,让这个变量a=flag,这里我们首先毁坏__wakeup方法的实行,然后将实例化时候的test参数,改成flag即可~

我们自己可以布局这样的序列化来获取flag:O:4:"test":2:{s:1:"a";s:4:"flag";}

O:4是工具名称长度是4 (test)2是 工具有2个属性(改变了属性真实个数,毁坏了反序列化时__wakeup方法调用)s:1 表示字符长度是1(属性是a)s:4 标识字符长度是4(属性a的值是flag)

这里有一点绕的是,工具是test,然后参数也是test,可能刚刚上大学的小朋友,有点搞不清楚,多看看书,多看看博客,你看的比别人多,你就比别人厉害,信息安全便是信息差~

Web安全入门实在很大略,便是要一直的学习,一直的记特性,一直的折腾,总有一天,你会创造,别人都喊你大神,大佬,秃顶强的时候,你就会溘然明白,原来信息安全真的很大略~

ailx10