Electronic Code Book (ECB)
Electronic Code Book (ECB)
ECB 属于分组密码工作模式的一种,将消息分组,使用密钥对各组进行加密。
错误传播
- 密文中该数据在传输过程出了错,不会错误传播
- 密文中丢失或增加一些数据位,密文不能正确解密
优点
- 可以并行运算
- 适用于随机存储的数据,比如加密密钥
- 有良好的差错控制
缺点
- 当明文分组重复时,密文也重复,易实现统计分析攻击
- 结构化数据,将产生大量重复的密文
- 统计分析、分组重放、代换攻击
主要用于发送很少明文分组时
- 例如,用主密钥加密会话密钥
分组重放
- ECB 模式最严重的问题是允许选取部分分组进行重放攻击
- 特别是针对按分组格式化的数据
- 必须辅助以消息认证来保证完整性
漏洞发现
打开主页是一个注册登陆页面
注册并登录(注册后就登录了),使用浏览器的开发者工具查看 Cookie
对 Cookie 进行转义和解码,得到以下结果
创建两个密码相同的账户 test1
和 test2
,并对获得的 Cookie 进行比较
- 密码
123456
- Cookie 的最后 8 个字节相同
用户名 | test1 |
test2 |
---|---|---|
Cookie | ZQ4Yc3VmczQRqrYvMpHp8w%3D%3D |
2IyM6y%2F4hO4RqrYvMpHp8w%3D%3D |
转义 | ZQ4Yc3VmczQRqrYvMpHp8w== |
2IyM6y/4hO4RqrYvMpHp8w== |
base64 解码 | 65 0e 18 73 75 66 73 34 11 aa b6 2f 32 91 e9 f3 |e..sufs4.../2...| |
d8 8c 8c eb 2f f8 84 ee 11 aa b6 2f 32 91 e9 f3 |..../....../2...| |
推测最后 8 个字节是密码,移除密码部分再进行 base64 加密和转义,仍然能够通过验证
- 说明后台不对密码部分进行验证
创建用户名和密码都为 20 个 a
的账户,对其 Cookie 进行转义和解码
- 8 个字节重复出现
- 用户名和密码不是直接拼接加密
username|delimiter
尝试使用不同长度的用户名+密码组合,推测并验证 Cookie 是分块加密的,块的大小为 8 个字节,分隔符为 1 个字节大小,填充为 8 字节
Username length | Password length | Username+Password length | Cookie’s length (after decoding) |
---|---|---|---|
2 | 3 | 5 | 8 |
3 | 3 | 6 | 8 |
3 | 4 | 7 | 8 |
4 | 4 | 8 | 16 |
4 | 5 | 9 | 16 |
漏洞利用
创建用户名为 aaaaaaaaadmin
的账户,并获得 Cookie
- 前 8 个字节与 20 个
a
的账户的 Cookie 相同,即 8 个a
将前 8 个字节删除后再进行 base64 加密,替换原来的 Cookie ,成功登录为 admin 用户
参阅
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Jckling's Blog!
评论