前言
某次玩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