[极客大挑战 2019]PHP
![[极客大挑战 2019]PHP image 24 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-24.png)
通过御剑发现了一个目录www.zip
打开该文件
![[极客大挑战 2019]PHP image 25 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-25.png)
打开flag.php
![[极客大挑战 2019]PHP image 27 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-27.png)
烟雾弹 没有用
打开index.php 发现可以通过get方法传入一个select 而且传入后会被反序列化到class.php中
![[极客大挑战 2019]PHP image 26 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-26.png)
打开class.php
![[极客大挑战 2019]PHP image 28 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-28.png)
我们传入的反序列化的内容有两个参数 一个username 一个password
当password=100并且username为admin时 会打印出flag 但是__wakerup这个魔法函数会将username默认设置成guest 所以这关的难点大概就是如何绕过__wakeup这个函数
![[极客大挑战 2019]PHP image 29 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-29.png)
绕过方法:只要序列化的中的成员数大于实际成员数,即可绕过 又因为username 和password是private声明所以在类名或者字段名前加上url编码空格 %00
payload:O:4:"Name":4:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
![[极客大挑战 2019]PHP image 30 - [极客大挑战 2019]PHP](https://zfmy.info/wp-content/uploads/2022/05/image-30.png)