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

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

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

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

工具目录

分类

查看所有分类
Loading categories
poodle-PoC — 🐩 Poodle(Padding Oracle On Downgraded Legacy Encryption)攻击 CVE-2014-3566 🐩 | Kitploit
工具/GitHubGitHub/mpgn/poodle-poc
加密/解密工具漏洞分析漏洞利用Web安全密码学渗透测试学习与教育
GitHubmpgn/poodle-poc

poodle-PoC

🐩 Poodle(Padding Oracle On Downgraded Legacy Encryption)攻击 CVE-2014-3566 🐩

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Poodle PoC 🐩 🐩 🐩

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

一种中间人攻击,它利用了 Internet 和安全软件客户端回退到 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), and C0 = IVPi = Dk(Ci) ⊕ Ci-1, and 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(先 MAC 后加密)

SSLv3 协议使用以下流程:它接收来自客户端的数据,解密数据,并使用 HMAC 检查完整性。

先 MAC 后加密(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
    • 如果相等 => 填充正确
    • 否则 => 填充错误

通过替换最后一个块,攻击者同时也会改变最后一个块的最后一个字节(即填充长度)。替换到填充块中的最后一个字节与原来相同的概率为 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。已在 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
下载工具