Shell指令混淆 Fay·D·Flourite

shell命令混淆

主要来自ping ping ping 这道题的思考。逻辑是rce去读取目录中的flag.php文件,但是过滤了空格,一些字符以及关键字flag。

可以联系着之前的短命令执行看,里面也包含一些字符串混淆

这里就做一点总结

  • 通配符匹配

*匹配任意长度字符,

?匹配单个字符

有个有意思的用法,可以拿来找一些地址

[]匹配指定范围单个字符

[a-z,A-Z,0-9]匹配所有数字,字母

  • 赋值变量构造语句

通过将值用变量代替的方式混淆,可用于关键字的过滤。

除了上面那种用存储在指定变量中,也可以直接在语句中使用

包括配合通配符等等

  • \转义符不影响命令执行

  • 使用空变量隔开字符$@ $x(x属于0-9) $* ${x}(x表示任何数字)

因为在未赋值时这些字符都为空,所以放在字符串中间不会影响命令执行

  • 用单引号或者双引号隔开

  • <<>代替空格

  • $IFS变量代替空格

  • {命令,参数}格式执行命令

  • base64编码

命令转base64编码,解码后执行。

  • 十六进制编码

同上

命令分隔与执行多条命令

  1. & & 表示将任务置于后台执行
  2. && 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才 会被执行。
  3. | | 表示管道,上一条命令的输出,作为下一条命令的参数
  4. || 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才 会被执行。
  5. 多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块