SEEDLAB2.0-Padding Oracle Attack

一些系统在解密给定密文时,验证填充是否有效,如果填充无效,则抛出错误。 这种看似无害的行为启用了一种称为padding oracle攻击的攻击。 发现许多知名系统容易受到此攻击,包括Ruby on Rails,ASP.NET和OpenSSL。
在本实验中,在容器中运行的两个Oracle服务器。 每个oracle内部都隐藏着一条秘密消息,它让我们知道知道密文和IV。 而且,对于我们提供的任何密文,它都会告诉我们填充是否有效。我们的工作是使用oracle的响应来找出秘密消息的内容。

先把之前运行的容器关掉,然后拉去本次实验所需环境
在这里插入图片描述

可以看到容器在运行了
在这里插入图片描述

Task1 熟悉padding
对于分组密码来说,当明文不是分组大小的整数倍时,需要填充,PKCS#5填充标准被大多数分组密码使用。
我们使用echo -n创建一个文件P,其长度为5
在这里插入图片描述

(如果不使用-n的话,长度会是6,因为echo会自动加上一个newline character)
然后使用openssl使用128位aes,cbc模式对其进行加密
在这里插入图片描述

为了看看在加密期间填充了什么,我们可以将其解密,但是默认的解密操作会自动移除填充内容,所以我们需要加上-nopad选项,这里就不会在解密时移除填充的内容了。
在这里插入图片描述

这样可能不直观,我们可以使用hex工具打印

在这里插入图片描述

Task2 Padding Oracle Attack(level 1)
一些系统,在解密给定的密文时,会校验其填充是否有效,如果无效会报错。这种行为会导致padding oracle attack。
在实验中,在5000端口我们提供一个padding oracle,其中有一条秘密消息,其会打印该秘密的密文。加密算法使用cbc模式的aes,加密密钥是K,这是其他人不知道的。你可以使用nc命令与其交互
你将会看到oracle返回的下列数据
在这里插入图片描述

前16字节是IV,剩下的密文。根据长度,我们知道密文长32字节,但是由于填充的存在我们实际并不知道明文的长度
oracle会接收我们的输入。输入的格式和message一样:16字节IV,加上密文。oracle将会使用secret K以及我们提供的IV解密密文。它不会告诉我们明文,但是会告诉我们padding是否有效。我们的任务是利用oracle提供的信息找出秘密消息实际的内容。我们实际只需要找密码信息的一个块

找出密码信息的明文。
有两个块P1和P2,我们只需要得到P2(得到P1也是类似的)
攻击代码在manual_attack.py
首先我们从oracle获取密文,密文有两个块,我们分别由C1,C2来放
在这里插入图片描述

如下图所示
在这里插入图片描述

D1,D2是AES块密码的输出,如果我们可以得到它们的值,我们就可以很容易通过将其与密文(对于第一个块而言是IV)异或得到明文。因此,如果我们知道D2的值,我们就可以使用C1与D2异或得到P2。
攻击者给oracle发送带有修改后的C1(CC1)的密文,尽管oracle不会告诉我们D2和CC1异或的结果,但是他会告诉我们这是否是有效的填充,这就为我们计算D2提供了方便。
D2中有16字节,我们一次可以确定一个字节。我们在代码中初始化两个数组D2和CC1,这初始值其实并不重要。我们的任务是通过迭代找到D2数组真实的值。
在这里插入图片描述

每次迭代中,我们关注CC1的1字节。我们尝试所有的256的可能,并发送构造好的密文CC1+C2(加上IV)给oracle,看看是否填充有效。如果填充正确,这个值可以帮助我们得到D2的一个字节。下面的代码关注K=1,它可以帮助我们找到D[15]的值
在这里插入图片描述

可以手动改变K值,利用每轮的执行结果恰当地设置D2,然后使用更新后的CC1重新跑来获得D2的下一个字节,比如D2[14],重复即可依次获得。
一旦获得了完整的D2,我们就可以获得明文P2的值

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值