当前位置: 首页 > news >正文

[BJDCTF2020]Mark loves cat [git泄露][变量覆盖漏洞]

扫出来/.git/ 

 利用GitHack拿到index.php

 源代码:

<?php

include 'flag.php';
//flag.php:
//<?php
//$flag = file_get_contents('/flag');

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_POST as $x => $y){
    $$x = $y;
}

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

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


echo "the flag is: ".$flag;

漏洞利用点:

GET提交的键值和键名都是可控的,存在 $$ 可以实现变量覆盖

$$x的意思就是把$x的值当作变量名再新创建一个变量,$$x=$$y的意思就是,比如说传进 ?name=test ,此时 $x=name,$y=test ,就会让$name=$text

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

我们可以利用变量覆盖构造GET请求handsome=flag,此时通过foreach就会变成$handsome=$flag,就会把flag的值赋给$handsome。再满足if条件就可以输出$handsome也即是flag值了

/?handsome=flag&flag=kkk&kkk=111

 得到flag

http://www.dtcms.com/a/100617.html

相关文章:

  • Java单列集合[Collection]
  • 【Vue3知识】Vue3集成富文本编辑器TinyMCE
  • Croe 11.0建模入门笔记:1.2 快捷键
  • C++的四种类型转换
  • 走进 detect.tflite:树莓派目标检测背后的核心模型详解
  • rust学习笔记21-闭包
  • 多人协同进行qt应用程序开发应该注意什么2?
  • H5S USC 宇视LiteAPI协议支持
  • C#从入门到精通(4)
  • CPU飙高系统反应慢怎么排查?
  • AI赋能职教革新:生成式人工智能(GAI)认证重构技能人才培养新范式
  • 告别枯燥工作,走向自动化
  • 人形机器人行业研究
  • 1304-习题1_4-课后习题-高等数学
  • Cesium知识总结(一)
  • 洛谷P3128 [USACO15DEC] Max Flow P
  • RUST学习笔记1:Rust开发环境搭建(Winodws11 x64)
  • QSettings用法实战(相机配置文件的写入和读取)
  • 第三届全国技能大赛广西选拔赛 《软件测试》项目样题
  • C语言深度解析:从零到系统级开发的完整指南
  • SpringBoot3+EasyExcel通过WriteHandler动态实现表头重命名
  • DAY 31 leetcode 142--链表.环形链表
  • java容器
  • 如何在不同的分辨率均能显示出清晰的字体?
  • 创作领域“<em >足</em><em>球</em><em>彩</em><em>票</em><em>计</em><em>划
  • 设计模式分类与定义(高软55)
  • xtuner微调大模型教程
  • SkyWalking+Springboot实战
  • 自定义C语言变量转换库
  • P1090合并果子(优先队列)