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

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

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

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

工具目录

分类

查看所有分类
Loading categories
poodle-PoC — :poodle: Poodle(针对降级旧版加密的填充预言机)攻击 CVE-2014-3566 :poodle: | Kitploit
工具/GitHubGitHub/mpgn/poodle-poc
加密/解密工具漏洞分析漏洞利用Web安全密码学渗透测试学习与教育
GitHubmpgn/poodle-poc

poodle-PoC

🐩 Poodle(针对降级旧版加密的填充预言机)攻击 CVE-2014-3566 🐩

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Poodle PoC 🐩 🐩 🐩

Poodle 攻击(Padding Oracle On Downgraded Legacy Encryption)的概念验证:

一种中间人攻击,利用互联网和安全软件客户端回退到 SSL 3.0 的机制。

如果使用的传输层安全协议是 SSLv3,Poodle 攻击允许您检索客户端发送到服务器的加密数据。但它不允许您检索用于加密请求的私钥。

imgonline-com-ua-twotoone-luefsrwi2n8iqy

1. 🐩 攻击概念 🐩

SSLv3 与 CBC 密码模式

SSLv3 是一种用于加密/解密和保护数据的协议。在我们的案例中,它使用 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。

使用 SSLv3 通过 HTTPS 发送的请求将使用 AES/DES 和 CBC 模式进行加密。SSLv3 相对于 TLS1.x 的特殊之处在于填充。在 SSLv3 中,填充使用随机字节填充,但最后一个字节等于填充长度。

示例:

T|E|X|T|0xab|0x10|0x02 其中 0xab|0x10|0x02 是填充。
T|E|X|T|E|0x5c|0x01 其中 0x5c|0x01 是填充。

另外,最后一个块也可以用一整块填充来填满,这意味着最后一个块除了最后一个字节外,其余都可以是随机字节。

T|E|X|T|E|0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 其中 |0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 是填充,攻击者只知道 0x07。因此,如果攻击者能够影响填充块,他就能知道最后一个块的最后一个字节等于一个块的长度。

影响填充

攻击者必须能够使受害者发送请求(例如,通过利用 XSS 使用 JavaScript)。然后他可以控制每个请求的路径和数据:

示例:在请求路径中添加一个“A”字节

root@kitploit:~
GET / HTTP/1.1\r\nSECRET COOKIE\r\n\r\n
GET /AAA HTTP/1.1\r\nSECRET COOKIE\r\n\r\nDATA

通过这种技术,他可以影响填充。

HMAC

SSLv3 还使用 HMAC 来检查明文的完整性和真实性。

密钥散列消息认证码(HMAC)是一种特定类型的消息认证码(MAC),它涉及密码散列函数(因此得名 'H'),并与一个秘密密钥结合。

有了这个,攻击者无法拦截和修改请求然后再发送回去。如果服务器遇到问题,他将发送 HMAC 错误。

MAC-then-encrypt

SSLv3 协议使用以下流程:它从客户端接收数据、解密数据、使用 HMAC 检查完整性。

MAC-then-Encrypt: 不会为密文提供任何完整性,因为在解密消息之前,我们无法知道它到底是真实的还是伪造的。 明文完整性。 如果密码方案是可延展的,就有可能修改消息使其看起来有效并拥有有效的 MAC。这当然是一个理论上的观点,因为实际上 MAC 密钥 > 应提供保护。 在这里,MAC 也不能提供任何关于明文的信息,因为它是加密的。

https://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac

这意味着我们可以在服务器不知情的情况下修改密文。这太棒了,真的 :)

2. 🔑 密码学 🔑

首先,最后一个块需要填满填充,正如我们之前看到的,攻击者使用请求路径并检查请求的长度。

  • 他保存原始密文的长度
  • 他在路径中添加一个字节并检查长度。
    • 如果长度不变,他再添加一个字节,依此类推。
    • 否则:密文请求的长度发生变化,他就知道最后一个块是满填充的。

由于除最后一个字节外,最后一个块都是随机字节,他可以用想要解密的块 Ci 替换这个最后一个块 Cn。修改后的请求将发送到服务器。

服务器:

  • 根据最后一个字节的长度移除填充
  • 从请求中获取 hmac(即 HMAC)
  • 获取明文
  • 比较 hmac(明文) 和 HMAC
    • 如果相等 => 填充正确
    • 否则 => 填充错误

通过替换最后一个块,攻击者也会改变最后一个块的最后一个字节(填充长度)。被替换到填充块中的最后一个字节与原字节相同的概率为 1/256,在这种情况下不会出现填充错误,攻击者可以利用此 XOR 运算来获取块 Ci 的最后一个字节,具体操作如下:

Pn = Dk(Cn) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
Pn = Dk(Ci) ⊕ Cn-1
xxxxxxx7 = Dk(Ci) ⊕ Cn-1
Dk(Ci) = xxxxxxx7 ⊕ Cn-1
Pi ⊕ Ci-1 = xxxxxxx7 ⊕ Cn-1
Pi = Ci-1 ⊕ xxxxxxx7 ⊕ Cn-1

(xxxxxxx7 或 xxxxxxx15,其中 x 为随机字节)

块的最后一个字节可以通过 Pi[7] = Ci-1[7] ⊕ xxxxxxx7 ⊕ Cn-1[7] 获取。 如果出现填充错误,攻击者需要关闭 SSL 会话以进行另一次握手(新的 AES 密钥),获取新的密文,然后替换最后一个块等。(通常需要 +300 次握手)

一旦获取一个字节,他就可以通过向路径中添加一个字节并从数据中移除一个字节来获得该块的所有其他字节:

用于获取字节 E,I,K,O 的请求
GET /a SECRET_COOKIE dataazerty PADDING_7
GET /aa SECRET_COOKIE dataazert PADDING_7
GET /aaa SECRET_COOKIE dataazer PADDING_7
GET /aaaa SECRET_COOKIE dataaze PADDING_7

关于 TLS1.0

即使 TLS 规范要求服务器检查填充,但一些实现未能正确验证它,这使得某些服务器即使在禁用 SSL 3.0 的情况下也容易受到 POODLE 攻击。

TLS 通常对 Poodle 是安全的,但某些实现不检查填充,就像使用 SSLv3 一样,这就是为什么某些 TLS 版本容易受到攻击。

3. 💥 开始攻击 💥

此仓库中有三个文件:

  • poodle-poc.py -> 一个不需要任何先决条件的概念验证
  • parallelization-poodle.py -> 另一个使用并行化的概念验证(非常快)
  • poodle-exploit.py -> 适用于真实场景的漏洞利用
1. poodle-poc.py 文件

此 PoC 探索了攻击背后的密码学原理。该文件让我们以简单的方式理解攻击是如何工作的。

root@kitploit:~
python3 poodle-poc.py
2. poodle-poc.py 文件

parallelization-poodle.py 文件是一个项目,也是一个想法 :) 请查看 https://github.com/mpgn/poodle-PoC/issues/1

root@kitploit:~
python3 parallelization-poodle.py

asciicast

3. poodle-exploit.py 文件

这是真正的漏洞利用。如果你想在渗透测试期间向客户证明 Poodle 攻击,并且客户使用的是旧服务器和浏览器,那么这个工具非常有用。只需将恶意代理的 IP 和正确端口配置到浏览器中,代理将处理其余的事情。

要求:

  • 确保客户端和浏览器只能使用 SSLv3 协议进行通信,例如在 Firefox 中使用 security.tls.version.min: 0 强制只使用 SSLv3。或者,如果客户端也使用 TLS,您可以强制降级。
  • 确保服务器存在漏洞,使用工具 testssl.sh image
  • 确保您可以在客户端注入 JavaScript(XSS)
  • 确保您可以拦截客户端与服务器之间的连接

💀 如果你满足这些先决条件,就可以开始攻击 💀:

该漏洞利用有两种可用选项:

  1. 直接在客户端设置代理的 IP 地址和端口,然后运行漏洞利用(转到第 3 部分)
  2. 设置 ARP 欺骗攻击,将客户端与服务器之间的所有流量重定向到您的机器上
  • 启用转发并设置一条 Iptable 规则,将客户端的流量重定向到您的代理
root@kitploit:~
$> echo 1 > /proc/sys/net/ipv4/ip_forward
$> iptables -i vmnet1 -t nat -A PREROUTING -p tcp --dport 1337 -j REDIRECT --to-ports 1337
  • 使用 arpspoof、ettercap 或 bettercap 工具发起 ARP 欺骗攻击
root@kitploit:~
$> bettercap -iface vmnet1
net.show
set arp.spoof.internal true
arp.spoof on
  1. 运行代理
root@kitploit:~
⋊> ~/T/poodle-Poc on master ⨯ python3 poodle-exploit.py -h              13:10:24
usage: poodle-exploit.py [-h] [--start-block START_BLOCK]
                         [--stop-block STOP_BLOCK] [--simpleProxy SIMPLEPROXY]
                         proxy port server rport

Poodle Exploit by @mpgn_x64

positional arguments:
  proxy                 ip of the proxy
  port                  port of the proxy
  server                ip of the remote server
  rport                 port of the remote server

optional arguments:
  -h, --help            show this help message and exit
  --start-block START_BLOCK
                        start the attack at this block
  --stop-block STOP_BLOCK
                        stop the attack at this block
  --simpleProxy SIMPLEPROXY
                        Direct proxy, no ARP spoofing attack

$> python3 poodle-exploit.py 192.168.13.1 4443 192.168.13.133 443 --start-block 46 --stop-block 50

选择块:如果不指定块选项,所有块都会被解密,但这可能需要很长时间。我强烈建议您先“了解”请求的格式化方式,并使用脚本 request-splitter.py 来确定要解密的块(理想情况下是 Cookie 块!:)

然后,例如通过 XSS 将恶意 JavaScript 代码(poodle.js)插入到易受攻击的网站中。启动 Python 脚本并输入 help,然后输入 search,最后输入 active。在此期间,只需要与 JavaScript 进行两次交互(search 和 active 命令)。

更新于 01/04/2018:该漏洞利用已添加降级选项。当漏洞利用检测到 TLS 协议时,输入命令 downgrade 即可降级到 SSLv3.0。

它是如何工作的?在握手期间(在客户端发送 hello 之后),漏洞利用会发送一个 handshake_failure 15030000020228,然后浏览器应重新发送一个以 SSLv3.0 为默认协议的 hello client。已在 Chrome 15 版本上测试,但在 Firefox 上无效(我认为它不支持协议重新协商),查看 #4

漏洞利用的完整视频:

ezgif-3-90a926f34356

Asciinema:

asciicast

贡献者

mpgn

许可证

MIT 许可证

参考

  • https://en.wikipedia.org/wiki/POODLE
  • https://www.openssl.org/~bodo/ssl-poodle.pdf
下载工具