前言
某次玩CTF遇到的题目,记录一下
原理
CBC解密会跟前一组(16字节为一组)进行xor,这样就可以在不知道key的情况下达到修改原文某些字节的目的,但是会造成密文部分字节被破坏,所有有一定局限性。
解题
#-*-coding:utf-8-*-
import base64
'''
CBC字节翻转攻击例子
已知密文和原文,要求修改密文中uid=1达到攻击目的。
原文:
1234567890abcdef1234567890abcdef1234567890abcdef1234567890auid=9;123123123123
密文(经base64编码):
9pzE4775q38+wGl/FqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2BwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig=
解题:
原文分成16字符一组
1234567890abcdef
1234567890abcdef
1234567890abcdef
1234567890auid=9;
123123123123
'''
enc='9pzE4775q38+wGl/FqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2BwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig='
_enc = base64.b64decode(enc)
uid = chr(ord(_enc[16*3-1])^ord('9')^ord('1'))
_enc2list = list(_enc)
_enc2list[16*3-1] = uid
_enc = ''.join(_enc2list)
x_enc = base64.b64encode(_enc)
print x_enc