@1kbfree
2018-10-02T03:03:31.000000Z
字数 1020
阅读 1939
代码审计
变量覆盖是指可以用我们自定义的参数值替换代码中原有的变量值,变量覆盖漏洞可以结合其他功能来打组合拳实现危害更高的漏洞,我先讲解变量覆盖漏洞再来说如何打组合拳~
先看使用方式(姿势):
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;
?>
效果:
更巧妙的使用方法
<?php
foreach (array( '_GET','_POST' ) as $key => $value) {
foreach ($$value as $_key => $_value){
echo $_key.':'.$_value;
echo "<br >";
}
}
?>
执行后的结果:
前提是存在变量覆盖漏洞~
看了那么多,那么我们该如何防御呢,有一个简单粗暴的方法就是判断这个变量是否存在,如果存在则不执行变量覆盖操作