【发布时间】: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 而没有任何其他检查。
【问题讨论】: