php extract 变量覆盖,extract变量覆盖
Bugkuctf题库中的一道代码审计题,通过巧妙利用file_get_contents函数特性来绕过extract变量覆盖
源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<?php
$flag='../readme.txt';
extract($_GET);
if(isset($shiyan)){
@$content=trim(file_get_contents($flag));
if($shiyan == $content){
echo 'flag{xxx}';
}
else{
echo 'oh,no';
}
}
?>
首先先弄明白几个函数:
extract:该函数将数组的键名作为变量名,键名对应的键值作为对应的变量值,返回值为设置成功的变量个数
也就是说这里的extract($_GET)将我们GET的参数名作为变量名,参数值作为变量值
例子如下:
1
2
3
4
5
6
7
8
9
10
11
12<?php
if(isset($_GET['shiyan']) $$ isset($_GET['flag'])){
$a=extract($_GET);
echo '$a:'.$a;
echo '
';
echo '$shiyan:'.$shiyan;
echo '
';
echo '$flag:'.$flag;
}
?>
输出结果:
成功设置了两个变量,$shiyan和$flag,所以$a=2
file_get_contents:将文件内容作为字符串输出
例子如下:
1
2
3
4
5
6
7<?php
$flag='../readme.txt';
$content=file_get_contents($flag);
echo $content;
?>
输出结果
这里注意file_get_contents函数里的参数是$flag,也就是说我们GET进来的参数flag值会将之前的flag值覆盖掉,从而造成变量覆盖,而我们输入的flag值如果不为文件名,函数执行错误,$content会被赋值为空
例子如下:
1
2
3
4
5
6
7
8
9
10<?php
$flag='../readme.txt';
if(isset($_GET['flag'])){
extract($_GET);
@$content=file_get_contents($flag);
echo $content.'1';
}
?>
输出结果:
要得到最终要的flag,就必须要让变量content值等于变量shiyan的值
所以我们可以让shiyan值也为空,这样flag值任意输入,只要不为文件名,就一定相等
另外,即使shiyan值为空,isset($shiyan)也是返回true的
1
2
3
4
5
6
7
8<?php
$shiyan="";
if(isset($shiyan)){
echo "11";
}
?>
输出结果:
php extract 变量覆盖,extract变量覆盖相关推荐
- 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin
1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...
- Java基础:成员变量的继承与覆盖
1.前言 最近在研究Java多态时,发现子类通过继承父类来实现Java中的多态.子类可以继承父类的成员方法和成员变量.子类中如果有同名的成员方法,并且方法的参数和返回值一样,那么这个子类定义的这个方法 ...
- linux超级基础系列——shell变量(本地变量和环境变量)
linux超级基础系列--shell变量(本地变量和环境变量) 2006-12-04 00:39 为使shell编程更有效,系统提供了一些shell变量.shell变量可以保存诸如路径名.文件名或者一 ...
- volatile变量与普通变量的区别
我们通常会用volatile实现一些需要线程安全的代码(也有很多人不敢用,因为不了解),但事实上volatile本身并不是线程安全的,相对于synchoronized,它有更多的使用局限性,只能限制在 ...
- js变量作用域和变量提升
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 "一个变量的作用域表示这个变 ...
- 编译器在处理const变量跟一般变量时的区别
const变量,也就是常量,当某个变量加上const属性的时候,表明这个变量不可修改. const变量是不可写的,那么我们对于const变量的处理只剩下读操作了. 当我们读一般的变量的时候,会先获取该 ...
- C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
文章目录 目录 一. 数据类型 C++ 中的数据类型 typedef enumeration枚举类型 c++中变量类型 二.变量作用域 三.常量 四.修饰符类型 目录 一. 数据类型 C++ 中的数据 ...
- php变量教学,PHP变量详解
什么是变量 变量指的就是在程序执行过程中数值可以变化的量,它与我们所讲的常量是相反的,我们常量是只要被定义了,在程序中就不能被改变.而变量是可以变的. 变量作用 变量就是用来保存我们值,相当于一个存储 ...
- java 局部变量空间 大小_变量作用域-1:局部变量 和成员变量、各种变量内存分配的大小...
注: ① 在同一个方法里面定义两次相同的变量,编译会报错 ②在同一个Java文件里面定义两次相同的类,编译会报错 java中的成员变量和全局变量有什么区别? 注:java中就没有全局变量这个概念,只分 ...
最新文章
- HomeKit推出已两年 但是苹果在智能家居上却被对手甩开了差距
- WiFiDemon – iOS WiFi RCE 0-Day漏洞利用
- 如何用SendMessage模拟某一按钮的点击事件
- POJ 3237 树链剖分学习(树链剖分小结)
- 自制Unity小游戏TankHero-2D(3)开始玩起来
- 浅谈:python自动化测试中使用异步
- 代理服务器-贪心算法
- 如何录制电脑内部声音
- IntelliJ IDEA 破解 到2100年到期
- 武汉理工计算机网络教学平台,武汉理工大学 操作系统
- 720度全景图有什么优势?
- javaWeb--MVC
- WalletContract区块钱包链接到web3js
- 防火墙技术之----包过滤(Packet Filter)
- 算法作业1:遍历与枚举
- 视频号无人直播怎么弄?微信视频号无人直播教程【无需软件】
- Unity3D-限制3D物体的旋转角度
- PermissionX 1.6发布,支持Android 12,可能是今年最大的版本升级
- 北大青鸟java项目实践_s2 北大青鸟Java S2 八个上机考试项目 Develop 249万源代码下载- www.pudn.com...
- 华中数控 Hnc 数据采集实战
热门文章
- Struts ActionForm简单理解
- Linux流量监控工具 (实时)-适用于centos 当然也兼容RHEL
- TurboMail邮件服务器荣膺“2012年度中国行业信息化最佳产品奖”
- MS CRM 2011中,对于多实体数据文件的导入
- 中学校园网建设实践与思考
- 微型计算机地未来发展,微型计算机的发展历史、现状和未来(最新) PDF.doc
- 你必须懂也可以懂的微服务系列三:服务调用
- linux ssh客戶端:termius介绍及安装
- vscode配置浏览器
- docker+jenkins+maven+svn