ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SEEDLAB2.0-Hash Length Extension Attack Lab

2021-04-14 19:59:35  阅读:504  来源: 互联网

标签:MAC Hash uid Extension mac Attack key 服务端 字节


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

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

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

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

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

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

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

然后启动
在这里插入图片描述

可以使用docker ps查看目前正在运行的容器id
在这里插入图片描述

要在该容器上shell如下所示即可
在这里插入图片描述

在ubuntu上编辑/etc/hosts绑定ip和域名
在这里插入图片描述

浏览器访问测试
在这里插入图片描述

可以看到是没问题的

服务端的代码在这里
在这里插入图片描述

可以看到有两个目录
在这里插入图片描述

www目录是服务端代码,Labhome目录有一个secret文件以及key用于计算MAC

服务端接收下列命令:
Lstcmd:用于列出在Labhome文件夹下的文件
Download:服务端将会从labhome返回指定的文件

发送请求时,服务端需要一个uid参数,它使用uid从labhome/key.txt获得mac key。
以下面的命令为例,是在使用lstcmd命令,其值设置为1,这要求服务端列出所有文件。最后一个参数是mac值,它是基于客户端和服务端共享的secret key以及命令参数计算得到的。在执行命令前,服务端会校验mac以确保命令的完整性。
http://www.seedlab-hashlen.com/?myname=JohnDoe&uid=1001&lstcmd=1
&mac=dc8788905dbcbceffcdd5578887717c12691b3cf1dac6b2f2bcfabc14a6a7f11
再比如下面的命令。这里包括两条命令:列出文件以及下载secret.txt。同样,需要加上有效的mac值,否则服务端不会执行命令
http://www.seedlab-hashlen.com/?myname=JohnDoe&uid=1001&lstcmd=1
&download=secret.txt
&mac=dc8788905dbcbceffcdd5578887717c12691b3cf1dac6b2f2bcfabc14a6a7f11
在ubuntu的浏览器上执行效果如下
在这里插入图片描述

Task1:发送列出文件的请求
格式是这样的:
http://www.seedlab-hashlen.com/?myname=&uid=
&lstcmd=1&mac=
这里myname使用自己的,uid可以从key.txt中挑一个,如下所示
在这里插入图片描述

冒号的左边是uid,右边是key
比如可以使用1001作为uid,那么对应的key就是123456
另外还需要mac
将key以及请求的命令按照如下格式拼接即可:
Key:R = 123456:myname=JohnDoe&uid=1001&lstcmd=1
然后就可以hash得到mac值
在这里插入图片描述

这样就构造出了完整的请求
http://www.seedlab-hashlen.com/?myname=JohnDoe&uid=1001&lstcmd=1
&mac=7d5f750f8b3203bd963d75217c980d139df5d0e50d19d6dfdb8a7de1f8520ce3

Task2:构造填充
为了实现hash长度扩展攻击,我们需要理解单向hash的padding是如何计算的。
Sha-256的块大小为64字节,所以在hash运算时,消息M会被分组为64字节大小,根据RFC 6234,SHA 256的填充包括1字节的\x80,然后跟着一些0,然后跟着一个8字节的长度域(长度的值是M的bit的数量)
假设M是This is a test message,其有22字节,所以填充就是64-22=42字节,其中包括8字节的长度域。M的长度就是22*8=176bit,176=0xB0。SHA256就会填充如下
在这里插入图片描述

这里需要注意长度域使用大端序。比如如果消息的长度为0x012345,那么长度域的内容应该是\x00\x00\x00\x00\x00\x01\0x23\x45

任务是要求对key.txt中的key和uid进行padding
这里要注意,在URL中,所有的16进制数字需要被编码为从\x到%,比如\x80要变为%80。在服务端,这会被重新解码回来

Task3:长度扩展攻击
我们将在不知道key的情况下为URL生成有效的MAC
假设我们知道一个有效的请求R的MAC,我们也知道MAC key的大小
我们的目标就是基于R构造一个新的请求,同时仍能计算出有效的MAC
现在给定原消息M=“This is a test message”,以及它的mac值,我们将会展示如果在M后加上消息"Extra message"并计算其MAC,而不需要知道密码的MAC key
在这里插入图片描述

新的mac可以用如下程序计算
在这里插入图片描述

并编译
在这里插入图片描述

运行即可得到新mac
在这里插入图片描述

Task4使用HMAC缓解攻击
从上面的例子中我们观察到当开发者以不安全的方式通过连接key和message来计算mac时会造成危害。解决办法就是使用HMAC来计算MAC
在本例中,修复时,修改verify_mac的如下部分
在这里插入图片描述

使用python的hmac。
修复完成后重启容易即可
如果要重复之前的实验,计算hmac可以使用下面的代码
(假设key是123456)

在这里插入图片描述

标签:MAC,Hash,uid,Extension,mac,Attack,key,服务端,字节
来源: https://blog.csdn.net/yalecaltech/article/details/115707339

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有