绕过 __wakeup()

[SWPUCTF 2021 新生赛]no_wakeup

https://www.nssctf.cn/problem/429

php的特性:当序列化后对象的参数列表中成员个数和实际个数不符合时会绕过 __wakeup();

1
2
3
O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}
绕过:
O:6:"HaHaHa":3:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}

O:6:"HaHaHa":O 表示这是一个对象(Object)。6 是类名的长度(HaHaHa 的长度)。”HaHaHa” 是类的名称,即这个对象属于 HaHaHa 类。
:2::表示这个对象有 2 个属性(admin 和 passwd)。
{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}:{} 内部是对象的属性。s 表示字符串(string)。
s:5:”admin”,这里的 5 表示字符串 admin 的长度(即 5 个字符),”admin” 是属性的名称。
s:5:”admin”,第二个 admin 是属性 admin 的值,表示对象的 admin 属性值为字符串 “admin”。
s:6:”passwd”,这里的 6 表示字符串 passwd 的长度(即 6 个字符),”passwd” 是属性的名称。
s:4:”wllm”,这里的 4 表示字符串 wllm 的长度(4 个字符),”wllm” 是属性 passwd 的值。