先知社区:https://xz.aliyun.com/t/8296
最近的安洵杯又看到laravel
反序列化+字符逃逸,找人要了题拿出来舔一下,看题发现出题大哥一些链没完全堵死,总结下这类题和laravel
中POP
链接的挖掘过程
个人水平较差、文中错误内容还请师傅们指教纠正。
这类题的一些Tips:
pravite 、Protected 属性序列化差别
Private、Protected
属性序列化和public
序列化稍有差异
example:
O:4:"test":3:{s:5:"test1";s:3:"aaa";s:8:"*test2";s:3:"aaa";s:11:"testtest3";s:3:"aaa";}
可以看到其中Private
的属性序列化出来为%00类名%00成员名
,而protected
的属性为%00*%00成员名
,所以这里``Private、protected`的长度都分别加了3和6。
这里输出中不会输出空字接,所以传递payload的时候需要将这里出现的空字节替换成%00
。
PHP 反序列化字符逃逸
出的也很多了不新奇了
题型参考安恒月赛Ezunserialize、强网2020web辅助、Joomla 的逃逸
拿安洵杯中的代码:
<?php
error_reporting(E_ALL);
function read($data){
$data = str_replace('?', chr(0)."*".chr(0), $data);
return $data;
}
function write($data){
$data = str_replace(chr(0)."*".chr(0), '?', $data);
return $data;
}
class player{
protected $user;
public function __construct($user, $admin = 0){
$this->user = $user;
$this->admin = $admin;
}
public function get_admin(){
return $this->admin;
}
}
这些题都会给一个"读方法"和”写方法“来对%00*%00
和