前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP变量覆盖漏洞小结

PHP变量覆盖漏洞小结

作者头像
雪痕@
发布2020-09-27 10:33:27
2.6K0
发布2020-09-27 10:33:27
举报
文章被收录于专栏:代码审计代码审计

前言

变量覆盖漏洞是需要我们需要值得注意的一个漏洞,下面就对变量覆盖漏洞进行一个小总结。

变量覆盖概述

变量覆盖指的是可以用我们自定义的参数值替换程序原有的变量值,通常需要结合程序的其他功能来实现完整攻击。那么它是如何引起的?其实,大多数变量覆盖漏洞是函数使用不当导致的。比如extract()函数和parse_str()。还有一个函数是import_request_variables(),它是在没有开启全局变量注册的时候,调用这个函数相当于开启了全局变量注册,在PHP5.4之后,这个函数被取消了。还有一种是利用$$的方式来注册变量,但是没有验证已有变量,导致被覆盖。

extract()函数使用不当导致变量覆盖

函数结构: int extract( array &

代码语言:javascript
复制
<?php
$b=2;
$a=array('b'=>'123');
extract($a);
echo $b;
?>

原来b=2,经过extract()函数对a处理后,

parse_str()函数使用不当导致变量覆盖

parse_str()函数的作用是解析字符串并且注册成变量,它在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉原有变量。函数说明如下: void parse_str( string str[, array &

代码语言:javascript
复制
<?php
$b=2;
parse_str($b=321);
print_r($b);
?>

我们发现$b的值被覆盖为321。

$$变量覆盖

先看引起覆盖的一小段代码:

代码语言:javascript
复制
<?php
$a=1;
foreach (array('_COOKIE','_POST','_GET') as $_request){
    foreach ($$_request as $_key =>$_value){
        $$_key = addslashes($_value);
    }
}
echo $a;
?>

它为什么会导致变量覆盖呢?重点在$符号,从代码中,我们可以看出_key为COOKIR、POST、GET中的参数,如果我们提交?a=3,那么key的值就为3,还有一个在a的前面,结合起来就是a=addslashes(_value),所以会覆盖原有a的值。上面的代码我们执行一下,如下图,发现a被覆盖成由GET方式传的8。

变量覆盖防范

变量覆盖最常见的漏洞点是做变量注册时没有验证变量是否存在。所以想要防范,推荐使用原始的变量数组,如_GET、_POST等,或者在注册变量前一定要验证变量是否存在。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 变量覆盖概述
  • extract()函数使用不当导致变量覆盖
  • parse_str()函数使用不当导致变量覆盖
  • $$变量覆盖
  • 变量覆盖防范
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档