zoukankan      html  css  js  c++  java
  • 变量覆盖 | 代码审计

    变量覆盖--代码审计

    这是个薄弱地方,所以这次学习一下,总结一下。

    变量覆盖漏洞:自定义的参数值替换原有变量值的情况称为变量覆盖漏洞

    经常导致变量覆盖漏洞场景有:$$ 使用不当,extract() 函数使用不当,parse_str() 函数使用不当,import_request_variables() 使用不当,开启了全局变量注册

    $$导致的变量覆盖

    $$介绍
    $$这种写法称为可变变量
    一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

    <?php 
    $a = "hello";
    echo "$a"; //输出hello
    $a="world";
    echo "$a"; //输出hello
    echo "$$a"; //输出word
    echo "$a ${$a}"; //输出hello world
    echo "$a $hello"; //输出hello world
    ?>

    漏洞产生
    使用 foreach 来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。

    <?php
    foreach ($_GET as $key => $value) {
    ${$key} = $value;
    }
    echo $a;
    ?>

    get得到的数据$key和$value,关键第3行,${$key}用get传进来的$key做为新的变量,将get传进来的$value赋值给它。
    get ?a=1 第3行会解析为$a=1。就造成了变量覆盖。

     

    extract()函数导致的变量覆盖

    extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。 

    extract()的用法参考:http://www.runoob.com/php/func-array-extract.html

    parse_str函数导致的变量覆盖

    parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。

  • 相关阅读:
    【Rust】结构体 struct
    【Rust】所有权、引用、借用
    Centos7升级glibc2.24
    ES用户权限控制
    PHP压缩html网页代码 : 清除空格,制表符,注释标记
    PHP通过HTTP_USER_AGENT判断是否为手机移动终端的函数
    php正则表达式替换URL链接地址为指定url的形式
    PHP下使用CURL方式POST数据至API接口的方法
    设计模式代理模式
    设计模式生成器模式
  • 原文地址:https://www.cnblogs.com/Oran9e/p/9034366.html
Copyright © 2011-2022 走看看