• 刚从一道题发现的一些东西,PHP笔记,关于extract和null 空字符串


    队友发给我的一道extract变量的最基础的题目,他发现了一些问题,当传入shiyan=&flag=0时出flag,当传入shiyan=0&flag=0时不出flag,传入shiyan=&flag=时,出flag

    <?php
    $flag='xxx';
    extract($_GET);
    if(isset($shiyan))
    {
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    {
    echo'flag{xxx}';
    }
    else
    {
    echo'Oh.no';
    }
    }
    ?>

    首先extract不光是覆盖原有变量,也是直接把数组中的键值做为变量名,数组键值作为变量数值。

    在解释下$_GET[ ]过程

    $a=$_GET['a']

    ?a=yunying

    相等于创建了一个get数组,传入了一个数组键为a,键值为字符串‘yunying’

    相当于

    如果传入的是a[0]=1,数组键a变成了一个数组,然后数组a中的数组键为0,数组键值的值为1,然后把a赋值给$a,呢么$a就变成了一个数组键为0,键值为1的变量

    所以对于$_GET[]的总结就是,其实可以把$a看成GET数组中的数组键a,如果?a=yunying,$a='yunying',如果?a[1]=1,则$a[1]=1

    而且不管flag经过extract覆盖为多少,content都为空字符串,因为file_get_contents无法读取变量。

    并且当get传入的形式是?shiyan=  时,形式与content一样

    都是空字符串,所以相等。我在这里试了下后,发现null与空字符串时弱相等,并且与0也弱相等

     

    总结如下,空字符串与null与0弱相等,并且extract是直接会赋值会直接再数组中操作,如果原来有这个变量,便会覆盖

    PHP反序列化

    https://www.freebuf.com/news/172507.html

    今天看到的一篇文章中,可以对私有属性修改

    <?php
    class SoFun
    { 
        protected $file='index.php';
        function __destruct(){ 
          show_source(dirname (__FILE__)."\".$this ->file);
          } 
        function __wakeup()
        { 
            $this-> file='index.php'; 
        }  
    }
    $file=$_GET['file']; 
    echo unserialize($file);
    ?>

    payload:    ?file=O:5:"SoFun":2:{S:7:"0*0file";s:8:"flag.txt";}

  • 相关阅读:
    oracle过期备份未删除导致磁盘撑爆
    数据文件、监听日志、告警日志、redo日志、归档日志的迁移
    linux软件卸载命令
    Nginx版本平滑升级方案
    rsync 服务搭建
    在node节点部署kubectl管理k8s集群
    源码编译安装nginx及设置开机启动项
    K8S日常运维中关于“ImagePullBackOff”报错的处理思路分析
    查看所有日志命令:journalctl
    Docker编排工具Docker Compose的使用
  • 原文地址:https://www.cnblogs.com/BOHB-yunying/p/10859219.html
Copyright © 2020-2023  润新知