变量覆盖审计


0x00 简介

本文章来自 公众号:404安全

变量覆盖,顾名思义就是可以覆盖已有变量值,导致变量覆盖的漏洞有:extract()parse_str()import_request_variables() 使用不当,或者使用了$$或者开启了全局变量注册。

0x01 变量覆盖演示

extract()

extract(array,extract_rules,prefix)
函数从数组中将变量导入到当前的符号表,即将数组中的键值对注册成函数,使用数组键名作为变量名,使用数组键值作为变量值。

可以看到我们初始变量值为a但是覆盖之后就变成了我们输入的值。

parse_str()

parse_str()函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。在没有array参数的情况下使用此函数,并且在PHP 7.2中将废弃不设置参数的行为,此函数没有返回值。

import_request_variables()

import_request_variables ( string $types , string $prefix )
将 GET/POST/Cookie 变量导入到全局作用域中, types 参数指定需要导入的变量, G代表GET,P代表POST,C代表COOKIE。此函数只能用于PHP4.1 ~ PHP5.4。

$$

典型的例子就是foreach来遍历数组中的值作为变量。

其中$_key的值为a,那么 $a的值就被覆盖为2了。

还有全局注册register_globals这些,php配置默认都是关闭的。

0x02 实战审计

本次用到的是MetInfo cms的变量覆盖漏洞,跟进主页来到核心配置文件

\include\common.inc.php

看到文件的24~28行,明显用到了我们上面说的&&变量覆盖的写法,不过这里他用到了daddslashes()防注入,不过并不影响我们这章讲的知识。

随便来到一个子文件看看他的加载方式\news\index.php

第7行包含一个变量,那么这个变量在什么地方,我们跟进 include/module.php 看看,在本文件搜索$module变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片

这里其实低版本的源码中没有这句话$module = ''; 其中$module变量都在$fmodule != 7 这个if条件中,我给大家打包的是低版本,我安装错了。 也就是只要我们传入的$fmodule的值为7那么我们就可以覆盖这个$module的值


只要上传一张图片或者其他文件就可以包含了,因为require_once的时候并没有判断他的后缀名。


文章作者: Young
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Young !
评论
 上一篇
反序列化审计 反序列化审计
0x00 简介本文章来自 公众号:404安全PHP反序列化漏洞,在我们使用unserialize()进行反序列化的时候,如果反序列化对象中存在一些我们可以利用的魔法函数且传入的变量可控,那么这个过程就可能触发这个魔法函数,来执行我们想要的过
2020-04-01
下一篇 
过滤逻辑错误审计 过滤逻辑错误审计
0x00 简介本文章来自 公众号:404安全 本文审计的系统为云ec电商系统版本1.2.3,网上也有审计文章这里主要是讲讲,有些程序可能本身他的过滤代码还是比较不错,但是逻辑问题造成了过滤函数没有起作用。 0x01 实例审计还是先从inde
2020-04-01
  目录