加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php漏洞代码审计之变量覆盖函数介绍

发布时间:2022-11-01 15:00:40 所属栏目:PHP教程 来源:未知
导读: 前言
所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,

前言

所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,代码审计就是白盒测试的常用方法,相较于黑盒测试,由于白盒测试能接触到源代码,可以更加详细的理解业务程序逻辑,也能更全面的发现安全风险。接下来本系列文章将以php代码审计为切入点,过程中结合常见源代码扫描工具和动态调试方法,来讲解php代码审计的常见漏洞点和分析方法。本章节将介绍变量覆盖函数的特性,便于研究后续相关漏洞的审计。变量覆盖函数extract特性

Extract(a,b,c),该函数将一个数组a,转化成变量和值的对应关系。该函数目前php5-8全版本都支持。b参数代表如果a中转化出的变量和本地变量冲突,采用什么措施。默认该函数的使用为extract(a),即默认转换数组,如果存在冲突,覆盖掉原有的变量。

如下图所示extract.php将打印$_SESSION变量内容

php如何删除一个变量?_PHP变量_php 变量类型

当我们通过POST请求传入自定义_SESSION变量值时

php如何删除一个变量?_php 变量类型_PHP变量

可以看到这里成功修改了function的值,但是该函数看样子只会修改post包中最后一个定义的变量,且导致原有的变量数组内容只剩下一个变量。另外注意,构造POST请求包时,需要将设置POSTContent-Type: application/x-www-form-urlencoded变量覆盖函数parse_str特性

Parse_str(string A,array B):如果A是URL传输进来的查询字符串,则会将它解析成变量并保存到数组B中。当没有设置数组B的时候,将会把解析到的变量覆盖掉已存在的同名变量,由此产生变量覆盖安全风险。目前该函数影响php所有版本。在7.2版本及之后版本,会报错,但仍然会执行。

php如何删除一个变量?_php 变量类型_PHP变量

如上,当输入的参数值为a=456时,parse_str会将a解析为变量,并赋值456,而如果原来本地有定义过这个变量,相关的值就会被覆盖掉。

php 变量类型_php如何删除一个变量?_PHP变量

我在测试的时候,使用php7.4.3nts版本,会报错PHP变量,但仍覆盖变量成功。

php 变量类型_PHP变量_php如何删除一个变量?

PHP变量_php如何删除一个变量?_php 变量类型

php 变量类型_PHP变量_php如何删除一个变量?

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!