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 参数,则由该函数设置的变量将覆盖已存在的同名变量。

  • 相关阅读:
    Centos7.3防火墙配置
    Centos7使用yum安装MySQL5.6的正确姿势
    Connect C# to MySQL
    ADO.NET操作MySQL数据库
    Mac OS 上 VIM 8.0 安装体验
    WebSocket实战之————Workerman服务器的安装启动
    C语言实现文件复制功能(包括文本文件和二进制文件)
    Gateway/Worker模型 数据库使用示例
    [转]Using the Group Pane to Repeat Page Titles
    [转]学习 WCF (6)--学习调用WCF服务的各种方法
  • 原文地址:https://www.cnblogs.com/Oran9e/p/9034366.html
Copyright © 2011-2022 走看看