我正在研究 Padding Oracle 攻击,其中涉及更改 IV 并将其与 HTML 发布请求一起发回。简单的版本是我正在尝试更改字符串的最后一个字节......我想我可能做错了。首先,我们从 Oracle 的 Raw IV 开始。
IV = 'NFhS0jOCAR0ymB2MM+3Pfg=='
我们无法使用它,因此我们对其进行 base-64 解码。
IV = base64.b64decode(IV)
这会将它变成我们屏幕上的垃圾(4XR�3�2��3��~),但现在它是我们可以使用的形式。现在我们想找出 IV 的最后一个字节,所以我们说
LastByte = IV[len(IV)-1]
这给了我们“~”作为最后一个字节。现在事情变得疯狂了,我们想改变 IV 的最后一个字节,方法是用一个我们称之为 X 的数字对它进行异或运算。
NewByte = ord(LastByte) ^ x
newIV = IV[:len(IV)-1] + str(NewByte)
然后我们对它进行base64编码并继续
newIV = base64.b64encode(newIV)
当我检查 newIV 的长度时,它与原始原始 IV 的长度相同,但我只是觉得这里有些不对劲。我是不是通过 str(NewByte) 搞砸了?我觉得我应该以某种方式使用 bytearray 来执行此操作,但我对使用它们并没有足够的了解。我是否正确更改了最后一个字节?