SEEDLAB2.0-Hash Length Extension Attack Lab

本文介绍了如何在Docker中配置seedlab2.0的HashLengthExtensionAttackLab,包括设置国内镜像源、构建和启动容器。实验涉及使用HTTP请求模拟Hash长度扩展攻击,并通过理解单向hash的padding计算MAC。文章还探讨了HMAC在防止此类攻击中的作用,并给出了修复示例。

注:这一篇会写得比较详细,之后就略写了

很多实验是需要配合docker的,这里以seed lab2.0的“Hash Length Extension Attack Lab”为例介绍如何搭建环境
首先由于众所周知的原因,我们需要设置docker国内镜像源
新建如下文件
在这里插入图片描述

写入源
在这里插入图片描述

保存后退出
执行以下命令执行镜像
在这里插入图片描述

并查看是否设置成功
在这里插入图片描述

回显的最后如果有下图红框内容则说明设置成功
在这里插入图片描述

接下来切到实验的yml文件所在路径执行下列命令build容器镜像
在这里插入图片描述

然后启动

### 哈希长度扩展攻击教程与实验室环境搭建 #### 实验室环境准备 为了进行哈希长度扩展攻击实验,需要设置一个安全可控的测试环境。推荐使用虚拟机来隔离实验环境,防止潜在的安全风险影响主机系统。 安装必要的工具包可以采用如下命令: 对于基于Debian/Ubuntu系统的Linux发行版: ```bash sudo apt-get update && sudo apt-get install python3-pip git pip3 install requests pycryptodome ``` 获取实验所需的脚本和资源文件可以通过克隆GitHub仓库实现: ```bash git clone https://github.com/example/hle-lab.git cd hle-lab ``` #### 攻击原理概述 哈希函数通常接受任意长度的消息作为输入并输出固定大小的数据摘要。当某些特定条件下,如果知道了一个消息`m`及其对应的MAC值(即H(k||m),其中k代表密钥),那么即使不知道原始密钥也可以计算出更长消息`m' = m || padding || extension`的新MAC值而无需知晓实际使用的密钥[^1]。 这里的关键在于理解如何正确地附加填充位以及后续数据到已知消息后面以形成有效的较长消息。大多数标准定义了具体的填充规则用于确保不同长度的信息能够被处理成适合内部状态更新的形式。 #### Python代码示例 下面是一个简单的Python程序片段展示如何执行一次基本的哈希长度扩展攻击模拟: ```python import hashlib from Crypto.Util.Padding import pad def extend_message(message, secret_length, append_data): # 计算总长度,并应用MD_padding方案 total_len = len(message) + secret_length padded_msg = message + b'\x80' while (len(padded_msg)+secret_length)%64 != 56: padded_msg += b'\x00' length_bits = ((total_len)*8).to_bytes(8,'big') final_block = padded_msg[-55:] + length_bits forged_hash_state = compute_intermediate_state(final_block) new_message = message + bytes([0x80]) \ + (b"\x00" * (((55-(len(message))%64)-int(len(message)/64)*64)))\ + length_bits + append_data return new_message, forged_hash_state def compute_intermediate_state(block): sha1 = hashlib.sha1() sha1.update(block) intermediate_value = sha1.hexdigest() # 将十六进制字符串转换回字节数组形式以便继续操作 iv_parts = [int(intermediate_value[i:i+8], 16) for i in range(0,len(intermediate_value),8)] return struct.pack(">IIIII",*iv_parts) if __name__ == "__main__": original_mac = "d9c7e2fbcde..." known_plaintext = b"data" appended_text = b";admin=true" extended_msg, fake_mac = extend_message( known_plaintext, guess_secret_key_size=16, # 需要猜测这个参数 append_data=appended_text ) print(f"Faked MAC: {fake_mac}") print(f"Extended Message: {extended_msg.decode()}") ``` 此段代码展示了如何通过给定的部分信息伪造一个新的合法消息及其相应的散列值。需要注意的是,在真实场景下还需要考虑更多细节如不同的哈希算法可能有不同的填充方式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值