当前位置:首页>php>CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

  • 2026-10-21 13:33:26
CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

CTF-buuoj-web-[极客大挑战 2019]PHP1

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 #网络安全竞赛

最新文章

随机文章