首页 > 其他分享 >20211128李杰—— MD5哈希长度延展攻击

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

时间:2024-04-13 17:26:29浏览次数:23  
标签:cmd 命令 签名 哈希 MD5 viewfile 20211128

任务描述:

在一个使用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. 运行截图

 

标签:cmd,命令,签名,哈希,MD5,viewfile,20211128
From: https://www.cnblogs.com/ljxbl/p/18133084

相关文章

  • 数据结构-哈希表
    数据结构-哈希表1.定义:哈希表(也称为散列表)是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过将键映射到表中一个位置来访问记录,从而加快访问速度。#创建一个空字典hash_table={}#向哈希表中添加键-值对hash_table['apple']=10hash_table['banana'......
  • MD5哈希长度延展攻击
    1.哈希长度延展攻击的机制哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。对于MD5哈希函数,攻击者利用......
  • 深入理解MD5算法:原理、应用与安全
    第一章:引言导言在当今数字化时代,数据安全和完整性变得至关重要。消息摘要算法是一种用于验证数据完整性和安全性的重要工具。在众多消息摘要算法中,MD5(MessageDigestAlgorithm5)因其快速、广泛应用和相对较高的安全性而备受关注。本书将深入探讨MD5算法的原理、应用和安全性,帮......
  • 漫谈:编码、哈希、摘要、加密都是什么(别再问“用base64加密行不行”了,会被鄙视)
    初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。    刚接触加密领域的新手经常搞不清楚这几个概念,这里给大......
  • 哈希(散列)查找
    1.哈希表(HashTable)(1)哈希表定义又称散列表,是一种数据结构,数据元素的关键字与其存储地址直接相关(2)同义词若不同的关键字通过散列函数映射到同一个值,则称为“同义词”(3)冲突通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”(4)填装因子装填因子=表中记录......
  • 20211128李杰——实验一-密码引擎-3-加密API研究
    实验一-密码引擎-加密API研究 实验一-密码引擎-加密API研究密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异......
  • 代码随想录 day6 哈希表
    题目:P242有效的字母异位数,P349两个数组的交集,P202快乐数,P1两数之和收获:1.使用数组,集合(set,主要是unorder_set,无序,无重复)做哈希表。哈希表一般用来快速判断一个元素是否出现在集合里。2.unorder_set的用法。classSolution{public:vector<int>intersection(vector<......
  • 哈希表自记录
    存储结构:1.开放寻址法#include<cstring>#include<iostream>usingnamespacestd;constintN=2000003,null=0x3f3f3f3f;inth[N];intn;intfind(intx){intk=(x%N+N)%N;//蹲坑法while(h[k]!=null&&h[k]!=x){k++;......
  • 字符串哈希板子
    #include<iostream>#include<cstring>#defineMAX_SIZE100usingnamespacestd;classStringHash{public:intsize;char*array;char*array_forward;unsignedlonglong*pre_base;unsignedlonglong*hash_array;uns......
  • 如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
    在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是bcrypt突出之处所在。Node.js是一个流行的用于开......