AIS3 2020 - 🐡 blowfish (Crypto, 334)

Challenge

題目:
prob.py
user.pickle

Solution

在 prob.py 可以看到他把 TOKEN 使用 Blowfish.MODE_CTR 加密傳了過來

CTR 很容易遭到 bitflip 的攻擊,導致解密成功但解密的內容跟原本不同

再來看看加密的內容:

import pickle
pickle.load(open('user.pickle','rb'))

可以得到一個 object :

[
{'name': 'maojui', 'password': 'SECRET', 'admin': False},
{'name': 'djosix', 'password': 'S3crE7', 'admin': False},
{'name': 'kaibro', 'password': 'GGInIn', 'admin': False},
{'name': 'others', 'password': '_FLAG_', 'admin': False}
]

有四組帳密,但都不是 admin

但也因為他用的是 CTR 我們只要把 False 翻成 True 就可以了

可以先在本地端把一個 admin 翻過來

obj = [
{'name': 'maojui', 'password': 'SECRET', 'admin': True},
{'name': 'djosix', 'password': 'S3crE7', 'admin': False},
{'name': 'kaibro', 'password': 'GGInIn', 'admin': False},
{'name': 'others', 'password': '_FLAG_', 'admin': False}
]
pickle.dumps(obj)

比較哪個位置的 bit 不一樣了

再把題目給的 TOKEN 做完 base64 decode 後翻同樣位置的 bit

最後 base64 encode 回來,就可以繞過他的檢查了。

AIS3{ATk_BloWf1sH-CTR_by_b1t_Flipping__}