4.8 KiB
{% hint style="success" %}
学习并练习AWS黑客技术:HackTricks培训AWS红队专家(ARTE)
学习并练习GCP黑客技术:HackTricks培训GCP红队专家(GRTE)
支持HackTricks
- 检查订阅计划!
- 加入 💬 Discord群组 或 电报群组 或 关注我们的Twitter 🐦 @hacktricks_live.
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享黑客技巧。
ECB
(ECB) 电子密码本 - 对称加密方案,用密文块替换明文块。这是最简单的加密方案。其主要思想是将明文分割成N位的块(取决于输入数据块的大小、加密算法),然后使用唯一密钥加密(解密)每个明文块。
使用ECB存在多个安全隐患:
- 加密消息中的块可以被移除
- 加密消息中的块可以被移动
漏洞的检测
想象一下,你多次登录一个应用程序,总是得到相同的cookie。这是因为应用程序的cookie是**<用户名>|<密码>
。
然后,你创建两个新用户,两者都有相同的长密码和几乎相同的用户名**。
你发现两个用户信息的8字节块是相同的。然后,你想到这可能是因为正在使用ECB。
就像在以下示例中一样。观察这两个解码的cookie中多次出现的块**\x23U\xE45K\xCB\x21\xC8
**
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
这是因为这些 cookie 的用户名和密码中包含多次字母"a"(例如)。不同的区块是包含至少 1 个不同字符的区块(也许是分隔符"|"或用户名中的某些必要差异)。
现在,攻击者只需发现格式是<用户名><分隔符><密码>
还是<密码><分隔符><用户名>
。为了做到这一点,他只需生成多个相似且较长的用户名和密码,直到找到格式和分隔符的长度:
用户名长度: | 密码长度: | 用户名+密码长度: | 解码后的 Cookie 长度: |
---|---|---|---|
2 | 2 | 4 | 8 |
3 | 3 | 6 | 8 |
3 | 4 | 7 | 8 |
4 | 4 | 8 | 16 |
7 | 7 | 14 | 16 |
漏洞的利用
移除整个区块
了解 cookie 的格式(<用户名>|<密码>
),为了冒充用户名admin
,创建一个名为aaaaaaaaadmin
的新用户,获取 cookie 并解码:
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
我们可以看到先前使用只包含a
的用户名创建的模式\x23U\xE45K\xCB\x21\xC8
。
然后,您可以移除第一个8B块,您将得到一个针对用户名admin
的有效cookie:
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
移动块
在许多数据库中,搜索WHERE username='admin';
和WHERE username='admin ';
(注意额外的空格)是相同的。
因此,另一种冒充用户admin
的方法是:
- 生成一个用户名:
len(<username>) + len(<delimiter) % len(block)
。对于块大小为8B
,可以生成名为username
的用户名,使用分隔符|
,块<username><delimiter>
将生成2个8B块。 - 然后,生成一个密码,填充包含我们想要冒充的用户名和空格的确切块数,例如:
admin
。
该用户的cookie将由3个块组成:前两个是用户名+分隔符的块,第三个是密码的块(伪装成用户名):username |admin
。
然后,只需用最后一个块替换第一个块,就可以冒充用户admin
:admin |username