【问题标题】:Does mcrypt_generic vulnerable to padding oracle attack?mcrypt_generic 是否容易受到 padding oracle 攻击?
【发布时间】:2020-08-10 20:45:19
【问题描述】:

填充oracle攻击需要填充0x01、0x02...这样的字节,这样我们就可以知道我们发送的哪个字节是正确的。例如:

b1 xor middle_str = 0x01
so: 
middle_str = 0x01 xor b1
b2 xor middle_str = anybytewewant
b2 = 0x01 xor b1 xor anybytewewant

但是 mcrypt_generic() 使用 0x00 进行填充,并且似乎只是在解密之前使用 rtrim 0x00 来取消填充。

echo bin2hex(mdecrypt_generic($this->demcrypt, hex2bin('5061726101676f6e0003000000')));
echo bin2hex(mdecrypt_generic($this->demcrypt, hex2bin('5061726101676f6e0003')));
//66a8dc339ae2377f857a398e1086b1e5
//66a8dc339ae2377f857a398e1086b1e5

我无法确定最后哪个字节会导致错误,因为它只是 rtrim 0x00 而没有任何其他检查。

【问题讨论】:

    标签: php security


    【解决方案1】:

    修剪 0x00 字节不是填充 oracle 攻击的目的。填充预言攻击是关于能够在解密期间区分加密是否由于错误填充而失败。您只需使用不同的值对密文的最后一个字节进行异或运算,然后查看结果。解密会失败吗?如果会失败,会出现什么消息/异常?

    根据您所展示的内容,无法判断该方法是否存在漏洞。

    如果您想了解更多关于一般加密的信息,尤其是 padding oracle,那么 prof 的这个加密在线课程。 Boneh 摇滚:https://www.coursera.org/learn/crypto

    【讨论】:

    • 感谢您的回答!我感到困惑的是,假设我们可以在解密过程中区分加密是否由于错误填充而失败,但由于 0x00 的修剪,我们仍然无法执行填充预言攻击。
    猜你喜欢
    • 2015-12-31
    • 2016-04-29
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2015-03-11
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多