php漏洞代码审计之变量覆盖函数介绍
所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,
前言 所谓代码审计是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。在安全领域,为了发现安全问题,常通过黑盒测试、白盒测试方法来尽可能的发现业务程序中的安全问题,代码审计就是白盒测试的常用方法,相较于黑盒测试,由于白盒测试能接触到源代码,可以更加详细的理解业务程序逻辑,也能更全面的发现安全风险。接下来本系列文章将以php代码审计为切入点,过程中结合常见源代码扫描工具和动态调试方法,来讲解php代码审计的常见漏洞点和分析方法。本章节将介绍变量覆盖函数的特性,便于研究后续相关漏洞的审计。变量覆盖函数extract特性 Extract(a,b,c),该函数将一个数组a,转化成变量和值的对应关系。该函数目前php5-8全版本都支持。b参数代表如果a中转化出的变量和本地变量冲突,采用什么措施。默认该函数的使用为extract(a),即默认转换数组,如果存在冲突,覆盖掉原有的变量。 如下图所示extract.php将打印$_SESSION变量内容 当我们通过POST请求传入自定义_SESSION变量值时 可以看到这里成功修改了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版本及之后版本,会报错,但仍然会执行。 如上,当输入的参数值为a=456时,parse_str会将a解析为变量,并赋值456,而如果原来本地有定义过这个变量,相关的值就会被覆盖掉。 我在测试的时候,使用php7.4.3nts版本,会报错PHP变量,但仍覆盖变量成功。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |