php 变量覆盖漏洞

变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。

通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有: 使 用 不 当 , e x t r a c t ( ) 函 数 使 用 不 当 , p a r s e s t r ( ) 函 数 使 用 不 当 , i m p o r t r e q u e s t v a r i a b l e s ( ) 使 用 不 当 , 开 启 了 全 局 变 量 注 册 等 。   本 篇 收 集 了 几 个 C T F 中 的 题 目 作 为 例 子 , 对 使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。 本篇收集了几个CTF中的题目作为例子,对 使extract()使parsestr()使importrequestvariables()使 CTF,extract(),parse_str()的问题进行总结。

0x01 $$导致的变量覆盖问题


<?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);
   }
   echo “This is your flag : “. $flag . “\n”;
   die($_200);
?>

解题:

源码包含了flag.php文件,并且需要满足3个if里的条件才能获取flag,题目中使用了两个foreach并且也使用了 . 两 个 f o r e a c h 中 对 .两个foreach中对 .foreachkey的处理是不一样的,满足条件后会将 f l a g 里 面 的 值 打 印 出 来 , 所 以 flag里面的值打印出来,所以 flagflag是在flag.php文件文件中的。 但是由于第7,11-14行间的代码会将flag的值给覆盖掉了,所以需要先将
flag的值赋给200或_403变量,然后利用die(200)或die(_403)将flag打印出来。解题方法: 由于第7,11-14行间的代码会将 f l a g 的 值 给 覆 盖 掉 , 所 以 只 能 利 用 第 一 个 f o r e a c h 先 将 flag的值给覆盖掉,所以只能利用第一个foreach先将 flagforeachflag的值赋给 2 00 , 然 后 利 用 d i e ( _200,然后利用die( 200die(_200)将原本的flag值打印出来。最终PAYLOAD: 本地复现,所以flag与原题不一样GET DATA:?_200=flag POST DATA:flag=aaaaaaaaaaaaaaaaaaaaa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值