[原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

时间:2023-03-09 08:25:16
[原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

简介

 原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January

 考察知识点:$$导致的变量覆盖问题

 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题

$$导致的变量覆盖问题

$$ 导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,

使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。

因此就产生了变量覆盖漏洞。请求?name=test 会将$name的值覆盖,变为test。

<?php
$name='thinking';
foreach ($_GET as $key => $value) $$key = $value; //这里进行了覆盖 $$key传入的值是name 传入进入成为$name 所以造成了name外部的变量被覆盖 var_dump($key);
var_dump($value);
var_dump($$key); echo $name; //?name=test
//output:string(4) “name”
//string(4) “test”
//string(4) “test”
//test

引用:https://www.freebuf.com/column/150731.html

过程

扫描发现git

获取git源码

代码审计!

<?php
include'flag.php';
$yds = "dog";
$is = "cat";
$handsome = 'yds'; foreach($_GET as $x => $y){ //get传值
$$x = $$y; //漏洞在这里 比如输入 yds=flag 相当于 $yds=$flag
} foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){ //判断get传进来的值等不等于flag 如果等于flag则跳过
exit($handsome);
}
} //检测get是否为flag 或者post是否为flag 必须两方都为假 否则输出$yds
//通过这里我们就可以结合前面的来构造 既然要输出$yds所以我们想办法让$flag的值赋值给$yds
//构造yds=flag GET传输 在经过第一个foreach的时候进行了赋值 等于进行了这样的一个操作$yds=$flag
//所以这个条件为真就可以输出flag了。
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds); }
// //检测POST flag是否为flag 或者get 是否为flag //至少有一个为真则为真
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
} echo "the flag is: ".$flag; ?>

最终构造pyload:

GET:yds=flag
POST:flag=11111

得到flag.....

[原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

随机推荐

  1. Python之包的相关

    包的产生: 由于模块不断更新,越写越大,仅用单个py文件会使模块逻辑不够清晰,所以需要将模块的不同功能放入不同的py文件,然后将所有py文件放在一个目录内,这个目录就是包 包就是一个包含用__init ...

  2. 【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件

    问题描述 在平常的工作习惯中,如果使用VS Code做脚本的开发,是一个非常好用的工具,现在也可以通过VS Code的不同方式来连接到Linux VM中(ssh), 第一种是VS Code的Termi ...

  3. vue知识点13

    知识点归纳整理如下: 组件 component     1.页面中的一部分,可以复用, 本质上是一个拥有预定义选项的一个 Vue 实例         2.使用         1)定义        ...

  4. Qt中的Q_OBJECT作用, 以及信号槽

    自定义类时, 如果需要使用Qt框架提供的信号槽机制, 必须满足以下两个条件: 第一:该类必须是QObject类的子类或者间接子类. 其次:在定义类时, 首行必须加上宏Q_OBJECT class My ...

  5. java刷题时常用容器详解

    当初学java时,只是简单的把java基础知识过了一遍就跑去刷题了,很多知识都是在刷题的过程中慢慢加深理解的. 由于每次刷题时,刷到与容器有关的我基本上都跑去百度了,例如百度一下:java中List的 ...

  6. DiskLruCache缓存bitmap

    public class MainActivity extends AppCompatActivity { private DiskLruCache diskLruCache; ImageView i ...

  7. rsync 守护进程模式搭建 与常见报错

    守护进程模式搭建 1.环境准备 2.安装rsync(做备份的服务器都安装) [root@backup ~]# yum install -y rsync 3.服务端配置 [root@backup ~]# ...

  8. OpenCV412+contrib+CUDA+cuDNN

    首先现在好软件(包含源码和官方编译好的库)和contrib源码包(对应版本怎么下载????) 软件: contirb包: 1.先把软件解压,在目录新建mybuild文件夹,用于输出保存自定义VS工程 ...

  9. 03.axios登录前端

    1.创建一个Login.vue页面   1.1 写页面 views/Login.vue   在 views/components 下创建 Login.vue 页面   <template> ...

  10. 【轻松学编程】如何快速学会一门高级编程语言,以python为例

    python文章目录 关注公众号"轻松学编程"了解更多. 写在前面:如何快速(比如在一个月内)学会一门高级编程语言? 现在想学一门编程语言并不难,网上有很多资料,包括书籍.博客.视 ...