@1kbfree
        
        2018-10-01T19:03:31.000000Z
        字数 1020
        阅读 2294
    代码审计
变量覆盖是指可以用我们自定义的参数值替换代码中原有的变量值,变量覆盖漏洞可以结合其他功能来打组合拳实现危害更高的漏洞,我先讲解变量覆盖漏洞再来说如何打组合拳~
先看使用方式(姿势): 

extract()的意思就是把数组里的key变成变量名,把value变成变量值。它的参数如下~
语法: 

也就是说该函数有3种情况会覆盖已有的变量: 
1. 第二个参数为EXTR_OVERWRITE(如果有冲突,覆盖已有的变量) 
2. 只传入第一个参数而不传入第二个参数的时候,也就是默认为EXTR_OVERWRITE 
3. 第二个参数为EXTR_IF_EXISTS时,他表示如果代码中存在那个变量就覆盖那个变量,否则无法覆盖
此函数缺陷利用方法之一: 
变量覆盖漏洞其实不是分函数的,这里只是为了演示,所以就那其中之一的思路来利用 
 
这里就是运用了变量覆盖漏洞来修改shop_money的值来购买物品(居然0元,当然这只是演示,程序员肯定不会这么简单的写的,这就需要你和程序员比细心了~)
使用方式(姿势): 
 
把这里的好字去掉~ 

此函数把GET、POST、COOKIE的参数注册为变量,一般不建议开启
注意,只在
PHP4.1到PHP5.4之间可用
<?php$name = 'whoami';import_request_variables('GP'); //G表示GET、P表示POST如果有C表示COOKIE;这里的GP表示注册GET和POST请求的参数为变量echo $name;?>
效果: 

 

更巧妙的使用方法
<?phpforeach (array( '_GET','_POST' ) as $key => $value) {foreach ($$value as $_key => $_value){echo $_key.':'.$_value;echo "<br >";}}?>
执行后的结果: 

前提是存在变量覆盖漏洞~
看了那么多,那么我们该如何防御呢,有一个简单粗暴的方法就是判断这个变量是否存在,如果存在则不执行变量覆盖操作
 

