首页 / 技术分享 / 网站安全漏洞 /
命令注入安全漏洞

命令注入安全漏洞

码不停提

2026-02-04
17 次浏览
0 条评论

命令注入是极为危险的漏洞之一,其根源在于**不可信输入**参与了命令的拼接和执行。安全开发需对用户输入保持警惕,采用安全的代码方式和接口,有效识别和防止命令注入,保障系统安全。

网站安全漏洞
命令注入漏洞
Web安全
分享:

概述

命令注入(Command Injection)是一种常见的安全漏洞,主要发生在应用程序将用户输入的数据拼接到系统命令中执行,且未做充分过滤与校验的场景。攻击者通过精心构造的输入,能够注入恶意命令并在服务器上执行,导致数据泄露、系统瘫痪甚至服务器被攻陷。


漏洞原理

命令注入通常发生在Web应用调用操作系统命令时。开发者为了实现某些功能,比如文件操作、调用脚本或执行系统命令,而直接拼接用户输入的数据到命令字符串中,并调用如system()exec()popen()等接口执行。例如:

import os
user_input = input("请输入文件名:")
os.system("ls " + user_input)

如果user_input直接由用户输入并拼接到命令中,攻击者可以输入如; rm -rf /等恶意内容,导致服务器文件被删除。


漏洞危害

  • 未授权执行操作系统命令
  • 服务器敏感文件泄露或被删除
  • 系统服务被破坏甚至失控
  • 攻击者获得服务器权限,进入内网等更严重后果

漏洞利用案例

示例1:

假设Web应用支持通过参数查询文件:

http://example.com/scan.php?ip=127.0.0.1

后端代码将ip参数直接拼接到命令:

<?php
$ip = $_GET['ip'];
system("ping $ip");
?>

攻击者利用注入:

http://example.com/scan.php?ip=127.0.0.1;cat%20/etc/passwd

真实执行命令:

ping 127.0.0.1;cat /etc/passwd

这样不但执行了ping,还读取了/etc/passwd文件内容,造成敏感信息泄露。


防御与修复建议

  1. 严禁直接拼接用户输入到系统命令行中。 尽量使用参数化接口,如subprocess.run()并传递参数数组,避免shell命令拼接。
  2. 对用户输入做充分的合法性校验和过滤。 只允许可接受的字符、模式、类型等,严格限制输入格式。
  3. 最小权限原则。 限制应用程序帐户权限,只能访问必要资源,即使被利用危害也有限。
  4. 使用安全API。 选择不调用Shell的API,或使用自带过滤机制的接口,如Python的subprocess.runargs列表参数。
  5. 关闭/限制危险函数。 比如PHP中禁用execsystemshell_exec等函数。
  6. 代码审计与安全测试。 对涉及系统命令执行的代码进行审查和渗透测试。

参考资料

评论区 (0)

你需要先 登录 后才能发表评论。
还没有人评论,赶快成为第一个吧。