Electronic Code Book (ECB)

ECB 属于分组密码工作模式的一种,将消息分组,使用密钥对各组进行加密。

错误传播

  • 密文中该数据在传输过程出了错,不会错误传播
  • 密文中丢失或增加一些数据位,密文不能正确解密

优点

  • 可以并行运算
  • 适用于随机存储的数据,比如加密密钥
  • 有良好的差错控制

缺点

  • 当明文分组重复时,密文也重复,易实现统计分析攻击
  • 结构化数据,将产生大量重复的密文
  • 统计分析、分组重放、代换攻击

主要用于发送很少明文分组时

  • 例如,用主密钥加密会话密钥

分组重放

  • ECB 模式最严重的问题是允许选取部分分组进行重放攻击
  • 特别是针对按分组格式化的数据
  • 必须辅助以消息认证来保证完整性

漏洞发现

打开主页是一个注册登陆页面

注册并登录(注册后就登录了),使用浏览器的开发者工具查看 Cookie

对 Cookie 进行转义和解码,得到以下结果

创建两个密码相同的账户 test1test2 ,并对获得的 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 用户

参阅