CTF——PHP审计——变量覆盖

本文详细介绍了PHP中的变量覆盖漏洞,包括$$使用不当、extract()、parse_str()、import_request_variables()使用不当以及全局变量注册开关问题,通过实例分析了这些问题可能导致的安全风险,并给出了相应的解题方法。

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

一,变量覆盖漏洞

参考:https://www.cnblogs.com/xiaozi/p/7768580.html

通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:

1,$$使用不当,

2,extract()函数使用不当,

3,parse_str()函数使用不当,

4,import_request_variables()使用不当,

5,开启了全局变量注册等。 

 

1,$$使用不当

$key='text'; $$key =200  的意思是  将 $key 的值作为变量  并赋值为 200

$$ 导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。请求?name=test 会将$name的值覆盖,变为test。

<?php


$name=’thinking’;

foreach ($_GET as $key => $value)

    $$key = $value;

var_dump($key);

var_dump($value);

var_dump($$key);

echo $name;

?>



//?name=test
//output:string(4) “name” string(4) “test” string(4) “test” test

例题一:

<?php

include “flag.php”;

$_403 = “Access Denied”;

$_200 = “Welcome Admin”;

if ($_SERVER["REQUEST_METHOD"] != “POST”)

    die(“BugsBunnyCTF is here :p…”);

if ( !isset($_POST["flag"]) )

    die($_403);

foreach ($_GET as $key => $value)

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

    $$key = $value;

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

    die($_403);

15.echo “This is your flag : “. $flag . “\n”;

16.die($_200);

17.?>

题目分析: 

源码包含了flag.php文件,并且需要满足3个if里的条件才能获取flag,题目中使用了两个foreach并且也使用了$$.两个foreach中对 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值