php的变量覆盖漏洞前提,php代码审计之变量覆盖漏洞

本文详细介绍了PHP中的变量覆盖漏洞,包括全局变量覆盖、extract()、遍历初始化变量、import_request_variables()和parse_str()函数造成的漏洞。通过实例展示了如何利用这些漏洞,并给出了CTF实战中的应用场景,帮助读者理解并防范此类安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php代码审计之变量覆盖漏洞

变量覆盖漏洞

自定义的参数值替换原有变量值的情况称为变量覆盖漏洞

经常导致变量覆盖漏洞场景有:$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。

全局变量覆盖

extarct()变量覆盖

遍历初始化变量

import_request_variables变量覆盖

parse_str()变量覆盖

变量覆盖的种类

全局变量覆盖(PHP5.3.0废弃、PHP5.4.0移除)

当register_global=ON时,变量来源可能是各个不同的地方,比如页面的表单、cookie等

";

if(ini_get("Register_globals"))foreach ($_REQUEST as $k => $v) unset(${$k});

print $a;

print $_GET[b];

?>

extract()变量覆盖

PHP extract()函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。

75d2f8a446747adea1821895487a0b1b.png

1eb3b9f818c4cdc1d4537cf8caa7d08e.png

遍历初始化变量($$变量覆盖)

常见的一些以遍历的方式释放变量的代码,可能会导致变量覆盖。

比如我们写一段如下代码:

我们这里的$b 实 际 上 就 是 b实际上就是b实际上就是a,所以会输出world.

import_request_variables变量覆盖

import_request_variables(‘G’)指定导入GET请求中的变量,从而导致变量覆盖。

我们还是直接传入?auth=1仍然可以得到get flag。

2653dcf438bb0e44dd285397765419b9.png

函数括号里为提交方式,我们可以改为’P’,提交方式改为POST,可以使用hackbar。

parse_str()变量覆盖

parse_str——将字符串解析成多个变量,如果参数str是URL传递入的查询字符串,则将它解析为变量并设置到当前作用域。

三、变量覆盖CTF实战

示例1

本实例是关于$$导致的变量覆盖,代码使用两个foreach函数定义了我们可以使用POST GET COOKIE方法定义变量和值进行变量覆盖。

$value)

{

$$_key=$_value;

}

}

$id = isset($id) ? $id :"test";

if($id==="mi1k7ea"){

echo "flag{xxxxxxx}";

}else{

echo "Nothing...";

}

?>

之后判断$id是否被定义,并判断相等则输出flag。

所以我们可以直接利用此处的变量覆盖漏洞直接传入?id=mi1k7ea。

ca575ba34d283e050b67c594b347abf2.png

示例二:

代码首先判断是否使用post方法传递了flag值,如果没有会输出“access denied"

$value) {

$$key =$$value;

}

foreach ($_POST as $key => $value) {

$$key=$value;

}

if ($_POST["flag"]!==$flag) {

die($_403);

}else{

echo "This is your flag:".$flag."\n";

die($_200);

}

?>

e0a521f10fb663f993ab5cd226b4bc2a.png

示例3:

76811be7c8889a929028b0972e79a132.png

示例4:

87094f7c25f2a5f07a7dc959fa9ff62d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值