Challenge
題目:
prob.py
user.pickle
Solution
在 prob.py
可以看到他把 TOKEN 使用 Blowfish.MODE_CTR
加密傳了過來
CTR 很容易遭到 bitflip 的攻擊,導致解密成功但解密的內容跟原本不同
再來看看加密的內容:
1 2
| import pickle pickle.load(open('user.pickle','rb'))
|
可以得到一個 object :
1 2 3 4 5 6
| [ {'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 翻過來
1 2 3 4 5 6 7
| 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_^_^}