shell命令混淆
主要来自ping ping ping 这道题的思考。逻辑是rce去读取目录中的flag.php文件,但是过滤了空格,一些字符以及关键字flag。
可以联系着之前的短命令执行看,里面也包含一些字符串混淆
这里就做一点总结
- 通配符匹配
*匹配任意长度字符,

?匹配单个字符

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

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


用[a-z,A-Z,0-9]匹配所有数字,字母
- 赋值变量构造语句
通过将值用变量代替的方式混淆,可用于关键字的过滤。

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

包括配合通配符等等

\转义符不影响命令执行

- 使用空变量隔开字符
$@$x(x属于0-9)$*${x}(x表示任何数字)
因为在未赋值时这些字符都为空,所以放在字符串中间不会影响命令执行

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

- 用
<和<>代替空格

$IFS变量代替空格

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

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

- 十六进制编码
同上

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