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
Инструменты шифрования/дешифрованияАнализ уязвимостейЭксплуатацияВеб-безопасностьКриптографияТестирование на ПроникновениеОбучение и Образование
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):

атака типа «человек посередине», использующая понижение версии протокола до SSL 3.0 в интернет- и программных клиентах безопасности.

Атака Poodle позволяет извлечь зашифрованные данные, отправленные клиентом серверу, если используется протокол SSLv3. Она не позволяет получить закрытый ключ, используемый для шифрования запроса.

imgonline-com-ua-twotoone-luefsrwi2n8iqy

1. 🐩 Концепция атаки 🐩

SSLv3 и режим CBC

SSLv3 — это протокол для шифрования/дешифрования и защиты данных. В нашем случае он использует режим сцепления блоков CBC. Открытый текст делится на блоки в зависимости от алгоритма шифрования (AES, DES, 3DES), а длина кратна 8 или 16. Если открытый текст не заполняет длину, в конце добавляется padding для заполнения недостающего пространства. Настоятельно рекомендую открыть изображения шифрования и дешифрования для чтения этого readme.

ШифрованиеДешифрование
Ci = Ek(Pi ⊕ Ci-1), and C0 = IVPi = Dk(Ci) ⊕ Ci-1, and C0 = IV

По сути, это простое XOR, вы также можете посмотреть это видео (не моё) https://www.youtube.com/watch?v=0D7OwYp6ZEc.

Запрос, отправленный по HTTPS с использованием SSLv3, шифруется с помощью AES/DES в режиме CBC. Особенность SSLv3 по сравнению с TLS1.x заключается в padding. В SSLv3 padding заполняется случайными байтами, за исключением последнего байта, равного длине padding.

Пример:

T|E|X|T|0xab|0x10|0x02, где 0xab|0x10|0x02 — это padding.
T|E|X|T|E|0x5c|0x01, где 0x5c|0x01 — это padding.

Также последний блок может быть полностью заполнен padding, то есть последний блок может состоять из случайных байтов, за исключением последнего.

T|E|X|T|E|0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07, где |0x5c|0x01|0x3c|0x09|0x5d|0x08|0x04|0x07 — это padding, и только 0x07 известен атакующему. Таким образом, если атакующий может влиять на блок padding, он сможет узнать, что последний байт последнего блока равен длине блока.

Влияние на padding

Атакующий должен иметь возможность заставить жертву отправлять запросы (например, с помощью JavaScript, используя XSS). Тогда он может контролировать путь и данные каждого запроса:

Пример: добавление байта "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

С помощью этой техники он может влиять на padding.

HMAC

SSLv3 также использует HMAC для проверки целостности и подлинности открытого текста.

keyed-hash message authentication code (HMAC) — это конкретный тип кода аутентификации сообщения (MAC), включающий криптографическую хеш-функцию (отсюда 'H') в сочетании с секретным криптографическим ключом.

Благодаря этому атакующий не может перехватить и изменить запрос, а затем отправить его обратно. Если сервер обнаружит проблему, он отправит ошибку HMAC.

MAC-затем-шифрование

Протокол SSLv3 использует следующую процедуру: он получает данные от клиента, расшифровывает данные, проверяет целостность с помощью HMAC.

MAC-затем-шифрование: Не обеспечивает никакой целостности шифротекста, так как мы не можем знать до расшифровки сообщения, является ли оно подлинным или поддельным. Целостность открытого текста. Если схема шифрования является изменяемой, возможно изменить сообщение так, чтобы оно казалось валидным и имело валидный MAC. Это теоретический момент, конечно, так как на практике секрет MAC должен обеспечивать защиту. Здесь MAC не может предоставить никакой информации об открытом тексте, так как он зашифрован.

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

Это означает, что мы можем изменить зашифрованный текст без ведома сервера. Это здорово, правда :)

2. 🔑 Криптография 🔑

Сначала последний блок должен быть полностью заполнен padding, как мы видели ранее, атакующий использует путь запроса и проверяет длину запроса.

  • Он сохраняет длину исходного шифротекста.
  • Он добавляет один байт в путь и проверяет длину.
    • Если длина не меняется, он добавляет еще один байт и т.д.
    • В противном случае: длина зашифрованного запроса меняется, он знает, что последний блок полностью заполнен padding.

Поскольку последний блок, за исключением последнего байта, заполнен случайными байтами, он может заменить этот последний блок Cn на блок, который хочет расшифровать Ci. Изменённый запрос отправляется на сервер.

Сервер:

  • удаляет padding, исходя из длины последнего байта.
  • получает HMAC из запроса = HMAC.
  • получает открытый текст.
  • сравнивает hmac(открытый текст) и HMAC.
    • если равны => хороший padding.
    • иначе => плохой padding.

Заменяя последний блок, атакующий также изменяет последний байт последнего блока (длину padding). Существует вероятность 1/256, что заменённый последний байт в блоке padding совпадёт с оригинальным. В этом случае ошибки padding не возникнет, и атакующий сможет использовать эту операцию 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] В случае padding атакующему нужно закрыть 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 требуют от серверов проверки padding, некоторые реализации не выполняют её должным образом, что делает некоторые серверы уязвимыми к POODLE, даже если они отключают SSL 3.0.

TLS обычно безопасен против Poodle, но некоторые реализации не проверяют padding — это как если бы мы использовали SSLv3. Именно поэтому некоторые версии TLS уязвимы.

3. 💥 Запуск атаки 💥

В этом репозитории три файла:

  • poodle-poc.py -> Доказательство концепции, не требующее никаких предварительных условий.
  • parallelization-poodle.py -> Ещё одно доказательство концепции, но с использованием параллелизации (очень быстро).
  • poodle-exploit.py -> Эксплойт для реального сценария.
1. Файл poodle-poc.py

Этот PoC исследует криптографию, лежащую в основе атаки. Этот файл позволяет нам простым способом понять, как работает атака.

root@kitploit:~
python3 poodle-poc.py
2. Файл parallelization-poodle.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 только, принудительно включите только SSLv3 в Firefox, используя security.tls.version.min: 0, например. Альтернативно, если клиент также использует 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!).

Затем вставьте вредоносный JavaScript-код (poodle.js) на уязвимый веб-сайт, используя, например, XSS. Запустите скрипт Python и введите help, затем search и, наконец, active. В это время потребуется только два взаимодействия с JavaScript (команды search и active).

Обновление от 01.04.2018: в эксплойт добавлена опция понижения версии. Когда эксплойт обнаруживает протокол TLS, введите команду downgrade, чтобы понизить до SSLv3.0.

Как это работает? Во время рукопожатия (после hello client) эксплойт отправляет handshake_failure 15030000020228, затем браузер должен повторно отправить hello client с SSLv3.0 в качестве протокола по умолчанию. Тестировалось на 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
Скачать инструмент