作者简介
王玉琪,安全帮攻防团队成员,擅长Web安全和渗透测试,热衷于CTF和AWD赛事,曾获第四届全国高校移动互联网应用开发创新大赛安全赛一等奖、全国第六届工控系统信息安全攻防竞赛三等奖,目前正在漏洞挖掘的道路上努力中。
01
魔法函数
在构造POP链之前,首先了解一下常见的PHP魔法函数,这也是构造POP的关键。
__construct()//当一个对象创建时被调用__destruct()//当一个对象销毁时被调用__wakeup()//使用unserialize时触发__sleep()//使用serialize时触发__destruct()//对象被销毁时触发__call()//在对象上下文中调用不可访问的方法时触发__get()//用于从不可访问的属性读取数据__set()//用于将数据写入不可访问的属性__toString()//把类当作字符串使用时触发__invoke()//当脚本尝试将对象调用为函数时触发
02
强网“web辅助”题目
POP链构造首先就是要找到头和尾,也就是用户能传入参数的地方(头)和最终要执行函数方法的地方(尾)。找到头尾之后进行反推过程,从尾部开始一步步找到能触发上一步的地方,直到找到传参处,此时完整的POP链就显而易见了。CTF赛中一般尾部就是getflag的方法,头部则是GET/POST传参。下面通过题目详细的展现POP链构造的过程。首先上源码:
class.php