SEEDLAB2.0-Hash Length Extension Attack Lab

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

很多实验是需要配合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)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值