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

admin 2023年1月30日21:46:43评论38 views字数 902阅读3分0秒阅读模式
前言


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


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

如下图所示extract.php将打印$_SESSION变量内容
php漏洞代码审计之变量覆盖函数介绍
当我们通过POST请求传入自定义_SESSION变量值时
php漏洞代码审计之变量覆盖函数介绍
可以看到这里成功修改了function的值,但是该函数看样子只会修改post包中最后一个定义的变量,且导致原有的变量数组内容只剩下一个变量。
另外注意,构造POST请求包时,需要将设置POST 
Content-Type: application/x-www-form-urlencoded
变量覆盖函数parse_str特性


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

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

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

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

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

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


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

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

原文始发于微信公众号(第59号):php漏洞代码审计之变量覆盖函数介绍

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月30日21:46:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   php漏洞代码审计之变量覆盖函数介绍https://cn-sec.com/archives/1347883.html

发表评论

匿名网友 填写信息