# [NSSCTF 2022 Spring Recruit]babyphp # [NSSCTF 2022 Spring Recruit]babyphp ```php ``` 根据代码意思,获得 flag 需满足以下条件: 1. 参数 a 有传值、参数 a 的值不包含数字、参数 a 的值可以转换成数字 2. 参数 b1 有传值、参数 b2 的值为 true 3. 参数 b1 的值和参数 b2 的值不相等、参数 b1 的值和参数 b2 的值经 MD5 加密后相等(强类型比较) 4. 参数 c1 的值和参数 c2 的值不相等、参数 c1 的值和参数 c2 的值均为字符串、参数 c1 的值和参数 c2 的值经 MD5 加密后相等(弱类型比较) bypass: 1. 参数 a 为非空数组:`a[]=1` or `a[]=a` > **相关实验** > > ![[NSSCTF 2022 Spring Recruit]babyphp-1](https://pic.imgdb.cn/item/6556be59c458853aefbd94e4.jpg) 2. 和 3. 参数 b1 和参数 b2 为不同内容的非空数组:`b1[]=1&b2[]=2` > **相关实验** > > 非空数组转为 bool 类型为 true: > > ![[NSSCTF 2022 Spring Recruit]babyphp-2](https://pic.imgdb.cn/item/6556c45ac458853aefc9c33e.jpg) > > **md5() 函数无法处理数组,返回NULL。`(NULL===NULL)` 转为 bool 类型为 true**: > > ![[NSSCTF 2022 Spring Recruit]babyphp-3](https://pic.imgdb.cn/item/6556c4e9c458853aefcae2f4.jpg) 4. `c1=s878926199a&c2=s155964671a` > **相关实验** > > php 在处理哈希字符串的时候,会把**以 0e 开头并且后面字符均为纯数字的哈希值**都解析为 0 > > MD5 加密后以 0e 开头的字符串: > > - QNKCDZO > - 240610708 > - s878926199a > - s155964671a > > ![[NSSCTF 2022 Spring Recruit]babyphp-4](https://pic.imgdb.cn/item/6556c92ec458853aefd3a133.jpg) payload:`a[]=1&b1[]=1&b2[]=2&c1=s878926199a&c2=s155964671a` ![[NSSCTF 2022 Spring Recruit]babyphp-5](https://pic.imgdb.cn/item/6556ca0cc458853aefd5a5d8.jpg)