DVWA Vulnerability: Cryptography Problems
字数 1045 2025-08-30 06:50:35

DVWA Cryptography 漏洞教学文档

概述

DVWA (Damn Vulnerable Web Application) 的 Cryptography 模块主要演示了与加密算法相关的安全漏洞,特别是在实现加密功能时常见的错误。本教学文档将详细分析从 Low 到 Impossible 四个难度级别的加密漏洞及其利用方法。

Low 级别漏洞分析

核心加密函数

Low 级别使用了 XOR 异或加密算法,关键代码如下:

function xor_this($cleartext) {
    $key = "wachtwoord";
    $ciphertext = "";
    for($i=0; $i<strlen($cleartext); $i++) {
        $ciphertext .= $cleartext[$i] ^ $key[$i % strlen($key)];
    }
    return $ciphertext;
}

加密流程

  1. XOR 加密:message 与 key 进行 XOR 处理,生成二进制数据
  2. Base64 编码:为了可读性,将二进制数据转换为 Base64 形式

漏洞利用

  1. 拦截的密文是 Base64 编码的
  2. 需要先解码 Base64 字符串
  3. 使用 xor_this() 函数与密钥 "wachtwoord" 进行解密

解密方法

$ciphertext = base64_decode($intercepted_ciphertext);
$cleartext = xor_this($ciphertext); // 使用相同的 XOR 函数解密

Medium 级别漏洞分析

核心解密函数

Medium 级别使用了 AES-128-ECB 加密模式:

function decrypt($token) {
    $key = "ik ben een aardbei";
    return openssl_decrypt(hex2bin($token), 'AES-128-ECB', $key);
}

漏洞利用步骤

  1. 解密密钥已知:$key = "ik ben een aardbei"
  2. 解密后的数据是 JSON 格式
  3. 修改 JSON 中的关键字段:
    • user 的值改成 "sweep"
    • exp 时间戳的值改成有效值或 9999999999
    • level 的值改成 "admin"
  4. 重新加密修改后的 JSON 生成新的 token

示例 token

3061837c4f9debaf19d4539bfa0074c1fa6cb95f192bdcf6d22c9c4d4b8faacd837d1e6b16bfae07b776feb7afe57630f950edda1fda24d2f7ffdf17b0d4da31

High 级别漏洞分析

关键发现

  1. 提交表单后发现引用了 token_library_high.php 文件
  2. 在源代码中找到密钥
  3. 加密使用了更复杂的方式

示例 token

{
    "token": "uN4N+V73wdXa+qowB7cc3A==",
    "iv": "MTIzNDU2NzgxMjM0NTY3OA=="
}

漏洞利用步骤

  1. 解密 token
  2. userid 改成 1(管理员 ID)
  3. 重新加密生成新的 token
  4. 使用新 token 登录

Impossible 级别

Impossible 级别实现了安全的加密方案,没有明显的可利用漏洞。

总结与防御建议

常见加密漏洞

  1. 使用弱加密算法:如 XOR 加密
  2. 硬编码密钥:密钥直接写在代码中
  3. 使用不安全的加密模式:如 ECB 模式
  4. 缺乏完整性验证:允许修改加密数据

防御措施

  1. 使用强加密算法(如 AES-256)
  2. 使用安全的加密模式(如 CBC 或 GCM)
  3. 密钥安全存储,不要硬编码
  4. 添加消息认证码(MAC)确保数据完整性
  5. 使用随机 IV 值
  6. 实施适当的密钥轮换机制

附录:加解密代码示例

XOR 加解密示例

function xor_encrypt_decrypt($input, $key) {
    $output = '';
    for($i=0; $i<strlen($input); $i++) {
        $output .= $input[$i] ^ $key[$i % strlen($key)];
    }
    return $output;
}

AES 加解密示例

// 加密
function aes_encrypt($data, $key) {
    $iv = openssl_random_pseudo_bytes(16);
    $ciphertext = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $ciphertext);
}

// 解密
function aes_decrypt($input, $key) {
    $input = base64_decode($input);
    $iv = substr($input, 0, 16);
    $ciphertext = substr($input, 16);
    return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}
DVWA Cryptography 漏洞教学文档 概述 DVWA (Damn Vulnerable Web Application) 的 Cryptography 模块主要演示了与加密算法相关的安全漏洞,特别是在实现加密功能时常见的错误。本教学文档将详细分析从 Low 到 Impossible 四个难度级别的加密漏洞及其利用方法。 Low 级别漏洞分析 核心加密函数 Low 级别使用了 XOR 异或加密算法,关键代码如下: 加密流程 XOR 加密 :message 与 key 进行 XOR 处理,生成二进制数据 Base64 编码 :为了可读性,将二进制数据转换为 Base64 形式 漏洞利用 拦截的密文是 Base64 编码的 需要先解码 Base64 字符串 使用 xor_this() 函数与密钥 "wachtwoord" 进行解密 解密方法 Medium 级别漏洞分析 核心解密函数 Medium 级别使用了 AES-128-ECB 加密模式: 漏洞利用步骤 解密密钥已知: $key = "ik ben een aardbei" 解密后的数据是 JSON 格式 修改 JSON 中的关键字段: 将 user 的值改成 "sweep" 将 exp 时间戳的值改成有效值或 9999999999 将 level 的值改成 "admin" 重新加密修改后的 JSON 生成新的 token 示例 token High 级别漏洞分析 关键发现 提交表单后发现引用了 token_library_high.php 文件 在源代码中找到密钥 加密使用了更复杂的方式 示例 token 漏洞利用步骤 解密 token 将 userid 改成 1(管理员 ID) 重新加密生成新的 token 使用新 token 登录 Impossible 级别 Impossible 级别实现了安全的加密方案,没有明显的可利用漏洞。 总结与防御建议 常见加密漏洞 使用弱加密算法 :如 XOR 加密 硬编码密钥 :密钥直接写在代码中 使用不安全的加密模式 :如 ECB 模式 缺乏完整性验证 :允许修改加密数据 防御措施 使用强加密算法(如 AES-256) 使用安全的加密模式(如 CBC 或 GCM) 密钥安全存储,不要硬编码 添加消息认证码(MAC)确保数据完整性 使用随机 IV 值 实施适当的密钥轮换机制 附录:加解密代码示例 XOR 加解密示例 AES 加解密示例