[BJDCTF2020]Mark loves cat
开始的界面没啥东西, 看了下源码好像也没啥东西
用dirsearch扫描一下
有git 泄露
用工具githack下载源码
<?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'){
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;
$$的变量覆盖
看第一个 exit($handsome)
foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ exit($handsome); } }
看起来这是矛盾的, 但是可以传两个参数 , 一个是flag 一个是handsome
?handsome=flag&flag=handsome
经过一次get的变量覆盖
$handsome=$flag
$flag=$flag
然后进入到判断那里面
开始进入遍历 $_GET
第一个 $x --> handsome
可以满足 $_GET['flag']==$x 而且 $x==handsome 也满足 !==flag
然后 exit($handsome) 输出 $handsome , 经过前面的GET的变量覆盖
$handsome=$flag , 所以就可以输出flag的值了
当然也可以构造出其他的, 利用后面的 exit($yds); exit($is);
来输出flag
?yds=flag
或者
?is=flag&flag=flag
[BJDCTF2020]Cookie is so stable
题目很明显的提示了 Cookie有问题
多尝试几遍, 可以发现无论输入什么都会登进去
所以应该不会是sql注入啥的
而且这个 形式感觉挺像 ssti注入的
尝试一下 {{3*3}}
也确实能够执行 输出 9
当然前面提示说看 cookie
登录后就会发现 cookie多出一行 user , 他的值经过url解码就会发现就是我们输入的东西
直接修改里面的值 , 相应的内容也会变化
需要注意到这个ssti注入是php, 而不是python的
抓个包, 也可以看到
修改里面的user的值
通用的payload就可以打出来