ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php的可变变量覆盖漏洞

2022-09-03 00:31:36  阅读:381  来源: 互联网

标签:变量 value 漏洞 flag 参数 key 可变 post php


题目如下:

<?php

highlight_file('source.txt');
echo "<br><br>";

$flag = 'xxxxxxxx';
$giveme = 'can can need flag!';
$getout = 'No! flag.Try again. Come on!';
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($giveme);
}

if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
    exit($getout);
}

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

foreach ($_GET as $key => $value) {
    $$key = $$value;
}

echo 'the flag is : ' . $flag;

?>

代码分析:

第一个if判断get请求和post请求的参数是否为flag,第二个if判断get请求参数和post请求参数为flag的值是否为flag。综上,代码限制的条件是,要有get和post的请求参数为flag,注意这里这是要求有这个参数而已,没有说参数唯一。其次要求我们参数为flag时其值都不能出现flag。接着分析,第一个foreach是关于post请求的,把参数名赋值给变量key,把参数值赋值给变量value,于是假设参数名为flag,参数值为a,则第一个foreach得到的是:$flag = a。即把变量flag重新赋值为a。同理得到第二个foreach得到的结果:$flag = $a。即变量flag的值为变量a的值。

漏洞利用:

因为最后要输出flag的值,而经过前面的代码又会把flag的值覆盖掉,于是这里解决的问题是:如何让变量flag不被覆盖,原样输出。

前面说了参数可以不为一,所以我们思路是:通过另外一个参数作为变量(假设为a)先获取原来flag的值,然后去获取变量a的值,则能够到达我们获取原来的值的目的。

payload:

GET:a=flag&flag=a

POST:anything(这里post传参不重要)

 

标签:变量,value,漏洞,flag,参数,key,可变,post,php
来源: https://www.cnblogs.com/nLesxw/p/moectf_ezphp.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有