过滤空格
${IFS}在man bash手册中有介绍。它是一个字符串类型的分隔符集合,顾名思义就是用来定义分隔符的内置变量。通过echo -n "$IFS" | hexdump可以看到十六进制编码后的内部值
1 | $ echo -n "$IFS" | hexdump |
不同的Linux发行版略有差异,主要是0x09(\t)、0x20(空格)、0x0a(\n)这三个默认值顺序的不同。它们三兄弟虽然紧挨在一起,但都是单独地起作用(即没有用来分割分隔符的分隔符)。IFS的值与$*、$@等内置变量也关系密切,通过将IFS赋空(NULL)可以实现一些特殊效果。在绕过时可以配合$9这个特殊空字符串
- 重定向符:
cat<>flag、cat<flag
过滤运算符
灵活运用&、|、&&、||、;、%0a(\n)、:等符号
过滤斜杠
用cd配合命令分隔符
通过grep递归查找:grep -ri . flag
过滤关键字
假设过滤cat
1 | `c''at` |
无x权限的ELF
利用动态加载器执行
1 | ldd readflag |