Cryptohack Flipping Cookie

**比特翻转攻击(bit flipping attack)**是一种针对CBC的常见的攻击方法

因为CBC核心是通过前一个密文块与当前明文块进行异或(XOR)运算后再加密,从而引入上下文关联性

但是异或是一种线性运算,可预测性强。

因此我们可以通过更改iv或者更改部分密文片段,经由异或运算,来实现对明文的翻转

例题

Cryptohack Flipping Cookie

image-20250716105126900

观察题目代码

我们可以获得iv的信息(CBC中iv的安全性至关重要)

并且可以知道,该网站并没有对信息做完整性检测,它只检查是否存在字符串’admin=True‘存在

再有就是我们能够获得的cookie中,第一个密文块对应’admin=False‘的片段

那么我们只需要通过拟造一个虚假的iv,并且让该iv和“admin=False……”的异或结果出现“admin=True……”

1
2
3
4
true_iv ^ t = 'admin=False……'
fake_iv ^ t = 'admin=True……'
得:
fake_iv = 'admin=True……' ^ 'admin=False……' ^ true_iv

写出代码:(很shi,看个乐呵就行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
from pwn import xor


def get_cookie():
x = requests.get('https://aes.cryptohack.org/flipping_cookie/get_cookie/')
texts = x.text
cookie = texts.split(":")[1][1:-3]
return cookie

def get_iv(cookie):
return cookie[0:32]

cookie = get_cookie()
iv = get_iv(cookie)
print('原iv为:'+iv)
iv = bytes.fromhex(iv)
new_iv = xor(b'admin=True;00000',b'admin=False;expi',iv)
new_iv = new_iv.hex()
print(len(new_iv))
print('攻击iv为:'+ new_iv)
print('cookie请填入:' + cookie[32:])