简介
变量覆盖即通过外部输入将某个变量的值给覆盖掉,通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞,下面是几种常见的变量覆盖漏洞类型。
register_global
全局变量注册,本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。当在php.ini
开启register_globals= On
时,代码中的参数会被用户提交的参数覆盖掉。而register_globals=Off
时,我们需要到特定的数组里去得到它。
<?php
echo
"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
,存储任何类型的值,如:string
,integer
,float
等。$$var
是一个引用变量,用于存储$var
的值。举个例子:
<?php
$a=
'hello'
;
$$a=
'world'
;
echo
"$a ${$a}"
;
// 注意使用大括号
echo
"$a $hello"
;
?>
输出为:
hello worldhello world
可以看到在这里${$a}
等同于$hello
,$$
导致的变量覆盖问题在CTF代码审计题目中经常在foreach
中出现,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。接着我们再来看怎么来进行变量覆盖:
<?
php
foreach
(
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..."
;
}
?>
这里使用GET
、POST
或COOKIE
都能触发,传入id=CloudCrowSec
后,在foreach语句中,$_key
为id,$_value
为CloudCrowSec
,进而$$_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变量覆盖漏洞学习笔记
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论