Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BEAST-PoC — :muscle: 针对SSL/TLS CVE-2011-3389的BEAST攻击概念验证 :muscle: | Kitploit
工具/GitHubGitHub/mpgn/beast-poc
漏洞分析漏洞利用Web安全密码学渗透测试学习与教育
GitHubmpgn/beast-poc

BEAST-PoC

💪 针对SSL/TLS CVE-2011-3389的BEAST攻击概念验证 💪

查看仓库
803117年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BEAST-PoC (选择明文攻击)

这个概念验证专注于 BEAST(针对 SSL/TLS 的浏览器攻击)攻击背后的密码学,该攻击由 Thai Duong 和 Juliano Rizzo 于 2011 年 9 月 23 日提出。这是一种选择明文攻击,如果所使用的传输层安全协议是 TLS1.0 或 SSLv3,它允许你检索敏感信息。 原始概念验证可在此处找到:Here come the Ninjas

注意:这也是对最初由 Phillip Rogaway 发现的漏洞的一种实现。该漏洞于 2002 年被发现,直到 2011 年 BEAST 出现之前都没有公开的利用代码。OpenSSL 早已知道这个问题,这也是他们在 2006 年 4 月将 TLS1.0 更新到 TLS1.1 的原因。

2 除第一条记录外,每条记录的 CBC IV 都是前一条记录的最后一个密文块。因此,这种加密方式对于能够自适应选择明文的攻击者来说是不安全的;

成为 BEAST

1. SSLv3/TLS1.0 与 CBC 密码模式

SSLv3/TLS1.0 是用于加密/解密并保护你的数据的协议。在我们的场景中,它们都使用 CBC 密码模式链接。明文根据加密算法(AES、DES、3DES)被分成块,长度为 8 或 16 的倍数。如果明文没有填满长度,会在末尾添加填充以补足缺失的空间。我强烈建议你打开这张加密和解密的图片来阅读本自述。

加密解密
Ci = Ek(Pi ⊕ Ci-1), 且 C0 = IVPi = Dk(Ci) ⊕ Ci-1, 且 C0 = IV

基本上这只是些简单的 XOR,你也可以观看这个视频(不是我)https://www.youtube.com/watch?v=0D7OwYp6ZEc。

我将在下一点介绍 IV。请记住,所有这些性质都将帮助我们发起攻击。

2. 密码学

当我们使用 CBC 时,需要一种称为 IV 的初始化向量。这个 IV 是随机的(或固定的),但无论如何,任何人都不应能预测它。在 TLS1.0 和 SSLv3 中,请求的第一个 IV 是随机的,这没问题。但为了节省时间,不必每次都生成新的随机 IV,TLS1.0 和 SSLv3 的实现将前一个密文的最后一个块用作 IV。换句话说,IV 现在可以猜测了。 我们假设每个块的长度为 8(DES),并且攻击者通过 MiTM 获取所有密文。

示例:

C0 | C... | Ci-1 | Ci | Ci+1 |Cn

现在是有趣的部分,以下是该攻击为了恢复一个字节所经历的不同密码学步骤:

  • 首先我们发送一个名为 C² 的请求,以获取密文的最后一个块,也就是第二个请求的下一个 IV
  • 这是一种选择明文攻击,因此攻击者可以通过受害者发送消息 bbbbbbbTHIS_IS_A_SECRET_COOKIE

你可以注意到秘密 cookie 前面的七个 b。如果块的长度是 8,我们需要推入 7 个已知字节。这个信息非常重要,攻击者知道第一个块的前 7 个字节。

但为什么?这让我们只需 256 种可能性就能找到一个字节,而不是用 256^8 来找 8 个字节!

现在受害者发送请求,它将被这样加密:

C0 | C1 | C2 | C3 | C4

其中 C0 = Ek(IV ⊕ bbbbbbbT) = Ek(C²n ⊕ bbbbbbbT)

  • 攻击者想要恢复 C0、C1、C2 ... 块中的信息,他始终需要前一个块
  • 在构造出特殊块 P'0 后,发送第三个请求。第一个块将被这样加密:C'0 = Ek(P'0 ⊕ IV') 由于这是一种选择明文攻击,攻击者可以这样构造块 P'0:

P'0 = C²n ⊕ C4 ⊕ bbbbbbbX

唯一未知的元素是 X,共有 256 种可能性,因此他最多尝试 256 个字符。

请求被发送并按如下方式加密:

C'0 = Ek(P'0 ⊕ IV')
C'0 = Ek(C²n ⊕ C4 ⊕ bbbbbbbX ⊕ IV'),其中 C4 ⊕ IV' = 0
C'0 = Ek(C²n ⊕ bbbbbbbX)
C'0 = Ek(IV ⊕ bbbbbbbX)

现在他比较 C'0 和 C0:如果它们相等,那么他就找到了第 8 个位置的字节 X。如果不匹配,他会用另一个字符重试并再次比较,依此类推。

现在我们有了一个字节,可以通过将之前的请求向左移动一位来获得另一个字节:bbbbbbTHIS_IS_A_SECRET_COOKIE。他现在有六个 b,而且我们也知道 T,所以还剩一个未知字符。我们构造新的 P'0 = C0 ⊕ C4 ⊕ bbbbbbTX,依此类推。

注意:另一种只需两个请求的方法是将明文的第一个块设置为该信息,并将其用于三个 XOR。我们不再需要 C² 的最后一个块。C1 = Ek(C0 ⊕ bbbbbbbT),然后 P'0 = C0 ⊕ C4 ⊕ bbbbbbbX。他还需要比较 C'0 和 C1。 这是另一种做法,你可以在 PoC 中注意到我把两种可能性都编码了 :)

我们现在可以恢复所有字符了!

启动

root@kitploit:~
python BEAST-poc.py

asciicast

攻击

攻击者无法使用 HTTP 协议,因为第一个块会被 GET / HTTP/1.1\r\n 填充。

...无法控制每个请求的前几个字节,因为它们总是被设置为固定字符串,例如 GET /、POST / 等。相反,他可以使用套接字。

他还需要向恶意页面注入一些 javascript。受害者需要连接到这个页面,并在攻击完成前一直停留在该页面。 这是一种选择明文攻击,因此攻击者可以通过 javascript 代码发送他想要的任何明文,并通过中间人(Man in The Middle)拦截结果。这是攻击的示意图:

beast

这次攻击需要一些重要条件才能成功(TLS1.0 或更低版本、CBC 密码模式、MiTM、恶意 javascript)。但 Thai Duong 和 Juliano Rizzo 证明了它是可行的,并通过在 Paypal 网站上窃取 cookie 展示了他们的漏洞利用。

现在一切都已修复,这种攻击实现的可能性很小。

贡献者

mpgn

许可证

MIT 许可证

参考资料

  • http://netifera.com/research/beast/beast_DRAFT_0621.pdf
  • http://www.bortzmeyer.org/beast-tls.html
  • http://fr.slideshare.net/danrlde/20120418-luedtke-ssltlscbcbeast
  • http://crypto.stackexchange.com/questions/5094/is-aes-in-cbc-mode-secure-if-a-known-and-or-fixed-iv-is-used
  • http://security.stackexchange.com/questions/18505/is-beast-really-fixed-in-all-modern-browsers
  • https://defuse.ca/cbcmodeiv.htm
  • http://stackoverflow.com/questions/22644392/chrome-websockets-cors-policy
下载工具