以bugku上的一道easy-pop为例
观察代码发现flag存在于evil类里面的flag.php中,所以关键就在于如何去调用evil类中的action(),观察发现lemon中存在action的调用,而且normal类和evil类中都有action()这个方法,所以我们可以输入一个序列化字符,调用evil中的action();
__construct中将normal赋值给classobj,修改classobj的值为evil就可以调用evil中的action
classobj的修饰符为protected,不便于在实例化对象后进行调用,可以先修改为public,在序列化后再加上%00*%00
最终结果为
?d=O:5:"lemon":1:{s:11:"%00*%00ClassObj";O:4:"evil":1:{s:10:"%00evil%00data";N;}}
提交得到flag