[BJDCTF2020]Mark loves cat
打开后没发现什么,代码最后输出一个“dog”
直接输入/.git/时返回403,输入/.git/head可以下载文件,发现git泄漏
使用GitHack下载源码
<?php $flag = file_get_contents('/flag')
<?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){ if($_GET['flag'] === $x && $x !== 'flag'){et型flag参数值等于$x的值,$x的值不等于flag exit($handsome); } } if(!isset($_GET['flag']) && !isset($_POST['flag'])){//不存在get型flag参数,且不存在post型flag参数 exit($yds); } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){//post型flag参数值等于flag,或get型flag参数值等于flag exit($is); }
可以看到有三个有输出的exit:
exit($handsome); exit($yds); exit($is);
而在初始化中,存在dog,猜测上面网页源代码输出的正是$yds
$yds = "dog"; $is = "cat"; $handsome = 'yds';
$flag = file_get_contents('/flag') $flag存在flag文件
网页输出$yds
只要在令$yds=$flag,将原来$yds变量的值进行覆盖,同时符合退出条件“不给flag传值”,就可以得到flag
通过get传值,构造?yds=flag
查看源代码
也可以使用其他exit
知识点($和$$)
php https://www.php.cn/php-weizijiaocheng-415613.html
https://blog.csdn.net/wenxiukeke/article/details/87790232