PHP变量覆盖漏洞小结
前言
变量覆盖漏洞是需要我们需要值得注意的一个漏洞,下面就对变量覆盖漏洞进行一个小总结。
变量覆盖概述
变量覆盖指的是可以用我们自定义的参数值替换程序原有的变量值,通常需要结合程序的其他功能来实现完整攻击。那么它是如何引起的?其实,大多数变量覆盖漏洞是函数使用不当导致的。比如extract()函数和parse_str()。还有一个函数是import_request_variables(),它是在没有开启全局变量注册的时候,调用这个函数相当于开启了全局变量注册,在PHP5.4之后,这个函数被取消了。还有一种是利用$$的方式来注册变量,但是没有验证已有变量,导致被覆盖。
extract()函数使用不当导致变量覆盖
函数结构:
int extract( array &$var_array[, int $extract_type = EXTR_OVERWRITE[, string $prefix = NULL]] )
再看一下PHP手册对这个函数的说明
说的通俗点就是将数组中的键值对注册成变量。extract()函数想要变量覆盖,需要一定的条件。它最多允许三个参数,用表格说明一下这三个参数:
由上图可知,该函数有三种情况会覆盖掉已有变量。下面用一段简单的代码来加深印象。
<?php
$b=2;
$a=array('b'=>'123');
extract($a);
echo $b;
?>
原来$b=2,经过extract()函数对$a处理后,$b被成功覆盖为123。
parse_str()函数使用不当导致变量覆盖
parse_str()函数的作用是解析字符串并且注册成变量,它在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉原有变量。函数说明如下:
void parse_str( string $str[, array &$arr] )
函数有两个参数,第一个是必须的,代表要解析注册成变量的字符串,比如“a=1”经过parse_str()函数后会注册$a并复制为1,第二个参数是一个数组,当第二个参数存在时,注册的变量会放到这个数组里,如果原来有相同的键值,则会覆盖掉它。
用一段简单的代码加深印象:
<?php
$b=2;
parse_str($b=321);
print_r($b);
?>
我们发现$b的值被覆盖为321。
$$变量覆盖
先看引起覆盖的一小段代码:
<?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等,或者在注册变量前一定要验证变量是否存在。
PHP变量覆盖漏洞小结的更多相关文章
- ctf变量覆盖漏洞:
1.变量覆盖: ①:针对extract函数的变量覆盖漏洞: <?php @error_reporting(E_ALL^E_NOTICE); require('config.php'); if($ ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
- 变量覆盖漏洞学习及在webshell中的运用
一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...
- 7. 由一道ctf学习变量覆盖漏洞
0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导 ...
- php之变量覆盖漏洞讲解
1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $up ...
- Web安全之变量覆盖漏洞
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_reques ...
- 代码审计-MetInfo CMS变量覆盖漏洞
0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...
- CTF——代码审计之变量覆盖漏洞writeup【2】
题目: 基础: 所需基础知识见变量覆盖漏洞[1] 分析: 现在的$a=’hi’,而下面的函数需满足$a=’jaivy’才可以输出flag,那么需要做的事就是想办法覆盖掉$a原来的值. 那么出现的提示 ...
- 2020/2/1 PHP代码审计之变量覆盖漏洞
0x00 变量覆盖简介 变量覆盖是指变量未被初始化,我们自定义的参数值可以替换程序原有的变量值. 0x01 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- linux下top命令详细介绍
linux下top命令详细介绍 top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu.内存的使用)占用状况,top命令的执行结果是一个动态显 ...
- guzzlehttp中的坑之带子目录的域名
1.问题: 线上开发环境配的是带子目录的域名,例如:https://aa.com/bb.使用nginx的location代理到项目的根目录.在代码中使用guzzlehttp访问这域名下的API时,一直 ...
- 仿京东BOE官网 jQuery代码
$(function() { $("#chanping").mouseenter(function() { $("#column").slideDown(500 ...
- 团队作业3:需求改进&系统设计(歪瑞古德小队)
目录 一.需求&原型改进 1.1 用户需求调查 1.2 选题需求改进 1.3 功能分析的四个象限 1.4 完善需求规格说明书 1.5 任务分解WBS调整 1.6 项目进度计划调整 二.后端架构 ...
- 模拟画图题P1185 绘制二叉树
题目链接P1185 绘制二叉树 题意概述 根据规则绘制一棵被删去部分节点的满二叉树.节点用 \(o\) 表示,树枝用/\表示.每一层树枝长度会变化,以满足叶子结点有如下特定: 相邻叶子节点是兄 ...
- 使用PowerShell连接Ubuntu
Ubuntu安装PowerShell Ubuntu安装PowerShell帮助文档 # Download the Microsoft repository GPG keys wget -q https ...
- Node.js的基础知识点
一,语言 和 环境(平台) 之间的关系 1,浏览器环境 中的 Javascript 浏览器中 Javascript 的组成部分 ECMAScript核心 + DOM + BOM 2,Node环境 中的 ...
- idea Tomcat部署war和war exploded的区别
原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...
- 赫然:怎样学习seo优化技术
http://www.wocaoseo.com/thread-79-1-1.html 今天的题目是学习SEO起步阶段每个人都要问的.SEO怎么学?如何进阶SEO技能?都包括哪些知识?笔者也自己总结过一 ...
- 跨站请求伪造(csrf)的防护手段
CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 造成的问题:个人隐私泄露以及财产安全. CS ...