CTF-buuoj-web-[极客大挑战 2019]PHP1
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_59afb9847c9615ab3ada90b5935ff757.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_73b4095d63d11eb5226fc4d86375eb39.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_59c2926bff9e9e7afc6f81d79cf66b71.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_56d892a3239fc3e09b97c9285d43214d.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_e7403948e3137db0980e4eaaa4418659.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_f358cab55b9fc34cb790ce998000b958.webp)
![CTF-buuoj-web-[极客大挑战 2019]PHP1](https://img.bim99.cn/ssd/ssd4/5607/2025-12-07/5607_c7625b5d19efc532662de0e78c427dd7.webp)
1.题目为[极客大挑战 2019]PHP1,属于buuoj平台的web类型。
2.靶机进去之后如图2,查看源码,没有发现有用信息。
3.dirsearch扫一遍,发现存在www.zip,下载解压缩如图3。
4.查看index.php,如图4,发现可以传入select参数,参数值为一个序列化后对象。
5.继续查看class.php,如图5,发现定义了Name类,包含username和password两个私有成员变量。在destruct方法中,只有username为“admin”且password为“100”时,才会输出flag。所以可以序列化一个Name类对象,值为上述内容。但当反序列Name类对象时,会自动执行wakeup函数,会将username变量赋值为guest。所以仍然不会输出flag。绕过方法:当序列化对象中的成员变量数大于实际的Name类中变量数时,不会执行wakeup。
6.原始序列化对象如图6:O:4:\"Name\":2:{s:14:\"Nameusername\";s:5:\"admin\";s:14:\"Namepassword\";i:100;} 。这里要注意,私有属性在序列化时会在类名前后添加“\\0”空字符,这也就是为什么s是14。但其ASCII码不可见,所以无法显示。所以实际的序列化字符串为:O:4:\"Name\":2:{s:14:\"\\0Name\\0username\";s:5:\"admin\";s:14:\"\\0Name\\0password\";i:100;}
7.为了绕过wakeup函数,需将Name值修改为3(大于2即可),并且“\\0”字符的URL编码为%00。即最终的URL为:/index.php?select=O:4:\"Name\":2:{s:14:\"%00Name%00username\";s:5:\"admin\";s:14:\"%00Name%00password\";i:100;}。如图7,得到flag。
#CTF #网络安全竞赛