命令注入攻击模拟
模拟系统命令注入漏洞,体验如何通过特殊字符注入执行任意命令
[X] 漏洞代码
// 危险:直接拼接用户输入
$cmd = "ping -c 1 " . $target;
exec($cmd, $output);[OK] 安全代码
// 安全:使用 escapeshellarg
$safe = escapeshellarg($target);
$cmd = "ping -c 1 " . $safe;
exec($cmd, $output);
[TIP] 注入提示:切换到漏洞模式,尝试输入:
127.0.0.1;cat /etc/passwd
或
127.0.0.1|id
或
127.0.0.1&whoami
[DEFENSE] 防御措施
- escapeshellarg():转义用户输入为安全的命令参数
- escapeshellcmd():转义整个命令字符串中的特殊字符
- 白名单验证:只允许预定义的合法字符(如 IP 地址的正则)
- 避免执行函数:尽量不用 exec()、system()、shell_exec()
- 最小权限:Web 服务以低权限账户运行