WeChall - Are you serial

Challenge

PHP 反序列化漏洞。页面显示多个源码文件,需要通过操控 serial_user cookie 触发 SERIAL_Solution::__wakeup() 调用 onChallengeSolved()

Solution

源码结构:

  • code.php: 读取 serial_user cookie,调用 unserialize(),然后用结果调用 getUsername()/getPassword()/getUserlevel()
  • SERIAL_Solution.php: __wakeup() 方法调用 onChallengeSolved()
  • SERIAL_User.php: 包含 username, password, userlevel 属性

核心漏洞: unserialize() 会实例化 cookie 中指定的类。如果反序列化 SERIAL_Solution 对象,__wakeup() 会自动触发。

Payload (设置为 serial_user cookie):

1
O:16:"SERIAL_Solution":0:{}

使用 curl 提交:

1
2
$ curl -b 'WC=<session>; serial_user=O%3A16%3A%22SERIAL_Solution%22%3A0%3A%7B%7D' \
'https://www.wechall.net/en/challenge/are_you_serial/index.php'

注意: __wakeup() 触发后,代码继续调用 getUsername() 等方法可能导致 fatal error。如果 curl 不生效,尝试通过浏览器 cookie 注入。