随笔 - 16  文章 - 0  评论 - 0  阅读 - 299

20211128李杰—— MD5哈希长度延展攻击

任务描述:

在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为rm)。

具体步骤:

  1. 研究MD5哈希长度延展攻击的机制,并找出适用于此场景的攻击方法。(3分)
  2. 使用合适的工具或脚本,基于cmd=viewfile和签名h,构造一个新的命令cmd=viewfile||padding||deletefile和新的签名。(6分)
  3. 提交你使用的攻击方法、工具或脚本的详细说明,以及成功构造的命令和新的签名。(6分)

1. 研究MD5哈希长度延展攻击的机制

       MD5哈希长度延展攻击利用了MD5算法的一个漏洞,允许攻击者在不知道原始数据的情况下,构造出具有相同哈希值的新数据。攻击者利用这一漏洞,可以在已知数据的哈希值的基础上,追加额外的数据,而不会影响到原始数据的哈希值。

        在这个场景中,管理员使用了一个密钥k和命令cmd的组合来生成签名:hash(k||cmd)。攻击者已经获取了一个允许查看文件的命令cmd=viewfile和对应的签名h。攻击者希望通过哈希长度延展攻击,生成一个新的签名,使得这个签名能够执行删除文件的命令(删除文件的命令为cmd=rm)。

2. 构造新的命令和签名

我们已经有了原始命令和签名:

  • 原始命令:cmd=viewfile
  • 对应签名:h

我们希望构造一个新的命令cmd=viewfile||padding||deletefile,并生成相应的签名。

3. 使用openssl库中的MD5_Update()函数来计算MD5哈希值,并手动添加填充数据以及新的命令进行攻击。以下是代码:

cCopy Code
#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>

int main() {
    // 原始命令和签名
    char original_cmd[] = "cmd=viewfile";
    unsigned char original_signature[MD5_DIGEST_LENGTH]; // 存储签名的数组
    // 假设原始签名已知,这里用16进制表示
    sscanf("68617a652cf8ad912cef9bbbe8ddacf7", "%32x", original_signature);

    // 需要添加的命令
    char additional_cmd[] = "||padding||deletefile";

    // 计算新的签名
    unsigned char new_signature[MD5_DIGEST_LENGTH]; // 存储新签名的数组
    MD5_CTX ctx;
    MD5_Init(&ctx);
    MD5_Update(&ctx, original_cmd, strlen(original_cmd));
    // 添加填充数据
    MD5_Update(&ctx, additional_cmd, strlen(additional_cmd));
    MD5_Final(new_signature, &ctx);

    // 输出新的命令和签名
    printf("新的命令:%s\n", strcat(original_cmd, additional_cmd));
    printf("新的签名:");
    for(int i = 0; i < MD5_DIGEST_LENGTH; i++) {
        printf("%02x", new_signature[i]);
    }
    printf("\n");

    return 0;
}

这段代码通过计算MD5哈希值来构造新的签名,其中包括了填充数据和新的命令。最终输出新的命令和签名。

4. 运行截图

 

posted on   20211128李杰  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示