PHP变量覆盖漏洞学习笔记

admin 2024年7月2日15:02:41评论49 views字数 1827阅读6分5秒阅读模式

简介

变量覆盖即通过外部输入将某个变量的值给覆盖掉,通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞,下面是几种常见的变量覆盖漏洞类型。

register_global

全局变量注册,本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。当在php.ini开启register_globals= On时,代码中的参数会被用户提交的参数覆盖掉。而register_globals=Off时,我们需要到特定的数组里去得到它。

<?phpecho "Register_globals: " . (int)ini_get("register_globals") . "<br/>";if ($auth) {    echo "覆盖!";}else{    echo "没有覆盖";}

当访问http://127.0.0.1/1.php时输出没有覆盖。当请求http://127.0.0.1/1.php?auth=1时会覆盖掉$auth输出覆盖。

extract()

extract()函数从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

<?php$auth=false;extract($_GET);

if ($auth){    echo "over";}

同样请求http://127.0.0.1/1.php?auth=1时会覆盖掉$auth输出over。

$$

$$符号在php中叫做可变变量,可以使变量名动态设置。$var是一个正常变量,名称为:var,存储任何类型的值,如:stringintegerfloat等。$$var是一个引用变量,用于存储$var的值。举个例子:

<?php$a='hello';$$a='world';echo "$a ${$a}"; // 注意使用大括号echo "$a $hello";?>

输出为:

hello worldhello world

可以看到在这里${$a}等同于$hello$$导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。接着我们再来看怎么来进行变量覆盖:

<?phpforeach (array('_COOKIE','_POST','_GET') as $_request)  {    foreach ($$_request as $_key=>$_value)      {        $$_key=  $_value;    }}$id = isset($id) ? $id : "test";if($id === "CloudCrowSec") {    echo "flag{xxxxxxxxxx}";} else {    echo "Nothing...";}?>

这里使用GETPOSTCOOKIE都能触发,传入id=CloudCrowSec后,在foreach语句中,$_key为id,$_valueCloudCrowSec,进而$$_key为$id,从而实现了变量覆盖输出flag。

import_request_variables

GET/POST/Cookie变量导入到全局作用域中,如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。那么和register_globals存在相同的变量覆盖问题。

$auth = '0';import_request_variables('G');

if($auth == 1){  echo "over!";}

同样传入http://127.0.0.1/1.php?auth=1时会将$auth的值覆盖为1,输出over!

parse_str()

将字符串解析成多个变量

$a='aa';$str="a=test";parse_str($str);echo ${a};

输出为test

参考链接

https://www.cnblogs.com/wjrblogs/p/13798340.html[1]

https://y4er.com/posts/variable-coverage/[2]

References

[1]: https://www.cnblogs.com/wjrblogs/p/13798340.html
[2]: https://y4er.com/posts/variable-coverage/

原文始发于微信公众号(云鸦安全):PHP变量覆盖漏洞学习笔记

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月2日15:02:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP变量覆盖漏洞学习笔记http://cn-sec.com/archives/2908837.html

发表评论

匿名网友 填写信息