形成的原因:应用者对一些没有过滤的系统命令进行恶意的拼接到正常的命令之中,执行危害安全的操作。
命令拼接符号,恶意的命令一定是拼接在正常的命令后面的。
windows的系统命令拼接符
& A&B 表示在执行a不论正确与否都时同时执行b
&& A&&B 表示执行a正确的情况下执行b
| A|B 表示执行A完成后以A的结果执行B
|| A||B 表示a错误才执行b
linux的系统命令拼接符
1 & 命令后面跟上一个空格和 ‘&’,在后台运行多个命令。
2 ; 使用分号,作用就是可以进行多条命令的无关联执行。
3 && 左边成功才执行右边
4 || 前面执行失败才执行后面
5() 圆括号把命令组合起来
过滤参数的方式都是识别对应的拼接符,所以要思维变通,很多时候,大量拼接符层层嵌套往往会有出其不意的效果.
常用绕过过滤的方法
如果过滤了空格
空格被程序过滤时,便需要利用以下字符尝试代替绕过:
<
${IFS}
$IFS$9
%09
如果使用了preg_match()进行了顺序的过滤,那麽使用变量拼接进行绕过。