[BJDCTF2020]Mark loves cat foreach导致变量覆盖

这里我们着重了解一下变量覆盖

首先我们要知道函数是什么

foreach

foreach (iterable_expression as $value)statement
foreach (iterable_expression as $key => $value)statement第一种格式遍历给定的 iterable_expression 迭代器。每次循环中,当前单元的值被赋给 $value。第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。 

 不一样只是键名是否赋值

数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。

变量覆盖

这个其实很简单 就是有点绕

<?php
$ary=array('a','b','c','c','e');
foreach($ary as $key=>$value){     //$ary的键名赋给$key,键值赋给$value$$key=$value;    //把键值赋给$$key
}
print_r($key);      //输出4
因为 数组为5 那么就是有 01234个值 这里就会将 $ary的值存入 就是4
print_r($value);    //输出e
因为经过遍历 所以这里是指向最后一个值 就是 $arr[4]=eprint_r($$key);      //输出e
最后 $$key=$value类似于
$(key)=value
所以输出$$key 就会输出 $(key) 就会输出 value =e?>

已经感觉类似渗透了

直接dir扫一下

一下就想到git泄露

我们直接 githack

直接看看源代码

flag.php

index.php

这里存在echo 我们直接去看看网站哪里存在输出了

然后我们就可以确定现在输出的是$yds变量 我们开始代码审计

分析

1.输出是dog 那么就是$yds
只有在
if(!isset($_GET['flag']) && !isset($_POST['flag'])){exit($yds);
}
会输出yds 所以我们需要传递 POST GET参数

我们思考完这个 我们想想看如何可以让 flag输出

我们可以通过 exit()输出flag值

首先这里是输出yds那么很简单我们get的参数就是 yds$$yds但是输出的是 $yds所以我们只需要让 $yds=$flag 就可以变相exit($flag)了$$yds=$$flag就类似于$(yds)=$(flag)所以我们只需要传递 yds=flag即可/?yds=flag

第二种

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){exit($is);
}这里存在 post的值绝对为flag 或者 get的值绝对为flag

我们首先看post

flag=flag$x=$flag=flag
这样就失去了变量 所以无法

接着我们看看get

flag=flag
$$flag=$flag=$flag因为我们要输出is所以?is=flag现在这里是 $(is)=$(flag)然后跟上 &flag=flag这样的话$(flag)=$(flag)最后转换还是$(is)=$(flag)这样就可以输出了

这样就可以输出flag了

/?is=flag&flag=flag

第三种

foreach($_GET as $x => $y){if($_GET['flag'] === $x && $x !== 'flag'){exit($handsome);}
}get的flag值绝对为 $x 并且 $x不为 flag

        

我们还是确定我们需要输出 handsome所以我们构造 ?handsome=flag这样$(handsome)=$(flag)然后就会去看看$flag是啥 但是这里$不能为flag我们在中间搭建一个桥梁即可?handsome=flag&flag=b&b=flag这样$(handsom)=$(flag)
然后
$flag=$b
就绕过了!==判断然后$(b)=flag这里别的师傅有更简单的思路?flag=a&&a!=flag所以我们构造一个中间值传递参数即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/112135.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity插件】实现多人在线游戏——Mirror插件的使用介绍

文章目录 前言导入Mirror插件 简单介绍一、RPC调用二、错误注意 基本使用一、创建场景的网络管理器二、创建一个玩家三、添加玩家初始生成位置四、玩家控制五、同步摄像机六、同步不同角色的名字和颜色修改七、同步动画八、同步子弹方法一方法二 九、聊天功能十、场景同步切换十…

爱思唯尔——利用AI来改善医疗决策和科研

爱思唯尔(Elsevier)是一家全球性的多媒体出版公司&#xff0c;为教育、专业科学和医疗社区提供20,000多种产品&#xff0c;其中包括《柳叶刀》和《细胞》等领先的研究出版物。 该公司正处于数字化转型的第一阶段&#xff0c;将公司140年中发表在报告和期刊上的大量数据数字化。…

Pybooks:这十本Python编程语言的入门书籍入门必看!

这个好像没有在微信发过图文版的&#xff0c;补一个。大部分介绍摘自京东等网站。 Python基础教程 评语&#xff1a;Python入门佳作 经典教程的全新修订 10个项目引人入胜 《Python基础教程&#xff08;第2版修订版&#xff09;》是经典的Python入门教程&#xff0c;层次鲜明…

计算机毕业设计 基于SSM+Vue的医院门诊互联电子病历管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【开箱即用】开发了一个基于环信IM聊天室的Vue3插件,从而快速实现仿直播间聊天窗功能

前言 由于看到有部分的需求为在页面层&#xff0c;快速的引入一个包&#xff0c;并且以简单的配置&#xff0c;就可以快速实现一个聊天窗口&#xff0c;因此尝试以 Vue3 插件的形式开发一个轻量的聊天窗口。 这次简单分享一下此插件的实现思路&#xff0c;以及实现过程&#xf…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

铁矿石 稀土总量的测定 电感耦合等离子体原子发射光谱法

声明 本文是学习GB-T 6730.84-2023 铁矿石 稀土总量的测定 电感耦合等离子体原子发射光谱法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了电感耦合等离子体原子发射光谱法测定稀土总量的方法。 本文件适用于铁矿石、铁精矿、…

华为aarch64架构的泰山服务器EulerOS 2.0 (SP8)系统离线安装saltstack3003.1实践

华为泰山服务器的CPU芯片架构为aarch64&#xff0c;所装系统为EulerOS 2.0 (SP8)aarch64系统&#xff0c;安装saltstack比较困难。本文讲解通过pip安装方式离线安装saltstack3003.1以进行集中化管理和维护。 一、系统环境 1、操作系统版本 [rootlocalhost ~]# cat /etc/os-r…

五层网络模型

分层的意义 当遇到一个复杂问题的时候&#xff0c;可以使用分层的思想把问题简单化 比如&#xff0c;你有半杯82年的可乐&#xff0c;想分享给你的朋友王富贵&#xff0c;但你们已经10年没有联系了。要完成这件事&#xff0c;你可能要考虑&#xff1a; 我用什么装可乐&#x…

企业架构LNMP学习笔记48

数据结构类型操作&#xff1a; 数据结构&#xff1a;存储数据的方式 数据类型 算法&#xff1a;取数据的方式&#xff0c;代码就把数据进行组合&#xff0c;计算、存储、取出。 排序算法&#xff1a;冒泡排序、堆排序 二分。 key&#xff1a; key的命名规则不同于一般语言…

RFID设备在自动化堆场中的管理应用

随着信息技术的高速发展&#xff0c;带动了港口生产和管理技术的长足进步&#xff0c;港口堆场内的自动化场桥的智能化水平成为码头提高生产率一个重要标签。各地海关着力于现代化科技手段&#xff0c;努力构筑新型的便捷通关模式&#xff0c;在进出口环节做好管理和服务。 全…

回溯算法 解题思路

文章目录 算法介绍回溯算法能解决的问题解题模板1. 组合问题2. N皇后问题 算法介绍 回溯法&#xff08;Back Tracking Method&#xff09;&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标…