本来这段时间太忙没有报ctf比赛的,今天在返校的火车上突然收到安恒的邀请短信,就登录打着玩玩了。
打开后是php代码:
1 | <?php |
很明显,需要序列化A然后在A中实体化B,进一步序列化B,达到“序列套序列”的效果。
可是直接写val=new B();
是不行的。
没思路之下想到这是套神出的题,所以就在ctfshow的wp里找了一下,果然发现了方法:
1 | <?php |
可以通过__construct()
魔法函数实体化别的类。
所以第一步的payload为:
1 | <?php |
之后就是给$func和$arg赋值,构造可执行函数了
这里可以直接参考https://blog.csdn.net/xiaolong22333/article/details/115332682
绕waf可以用get_defined_vars()函数,所以第二个payload为:
1 | <?php |
获得真正的flag文件名(不愧是套神)
然后可以用require代替被waf的include,用base64绕过flag的waf(VHJ1M2ZsYWcucGhw
)
所以最后的payload:
1 | <?php |
得到真正的flag