Изменение последнего байта строки

Я работаю над атакой Padding Oracle, которая включает в себя изменение IV и отправку его обратно с HTML-запросом. Простая версия состоит в том, что я пытаюсь изменить последний байт строки.... и я думаю, что я могу делать это неправильно. Сначала мы начнем с Raw IV от Oracle.

IV = 'NFhS0jOCAR0ymB2MM+3Pfg=='

Мы не можем работать с этим, поэтому мы делаем декодирование Base-64 на нем.

IV = base64.b64decode(IV)

Это превращает его в мусор на нашем экране (4XR 3 2 3 ~), но теперь это в форме, с которой мы можем работать. Теперь мы хотим выяснить последний байт IV, поэтому мы говорим

LastByte = IV[len(IV)-1]

Что дает нам "~" как последний байт. СЕЙЧАС все становится сумасшедшим, мы хотим изменить последний байт IV с помощью XOR, присвоив ему номер, который мы назовем X.

NewByte = ord(LastByte) ^ x
newIV = IV[:len(IV)-1] + str(NewByte)

И тогда мы base64 кодируем его и идем дальше

newIV = base64.b64encode(newIV)

Когда я проверяю длину newIV, она равна длине исходного raw, но я просто чувствую, что что-то здесь не так. Я испортил это, делая str(NewByte)? Я чувствую, что должен как-то делать это с помощью bytearray, но я не знаю достаточно об их использовании в одном. Правильно ли я изменил последний байт?

1 ответ

Решение

Вы хотите использовать chr() функция, чтобы превратить целое число XORed обратно в односимвольную строку:

NewByte = chr(ord(LastByte) ^ x)

chr() обратная ord():

>>> ord('~')
126
>>> chr(126)
'~'

Вы можете использовать отрицательные индексы для нарезки или выбора относительно конца строки, нет необходимости использовать len(IV) Вот:

IV = base64.b64decode(IV)
LastByte = IV[-1]
NewByte = chr(ord(LastByte) ^ x)
newIV = IV[:-1] + NewByte
newIV = base64.b64encode(newIV)

или, более кратко:

IV = base64.b64decode(IV)
newIV = base64.b64encode(IV[:-1] + chr(ord(IV[-1]) ^ x))

Демо-версия:

>>> IV = 'NFhS0jOCAR0ymB2MM+3Pfg=='
>>> x = 128
>>> IV = base64.b64decode(IV)
>>> base64.b64encode(IV[:-1] + chr(ord(IV[-1]) ^ x))
'NFhS0jOCAR0ymB2MM+3P/g=='
Другие вопросы по тегам