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),|| 右边的命令才 会被执行。;
多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块