Вступ
Привіт, друзі, ласкаво просимо до серії “eJPT Challenge Lab”!
Огляд та практичні лабораторії — https://medium.com/@dhanushcool2410/ejpt-v2-cert-overview-practice-labs-21a30b86765b
У нашій попередній публікації ми розглядали Challenge Lab 11: ToolsRus. Тепер ми перейдемо до Challenge Lab: HeartBleed.
Ця лабораторія допоможе вам попрактикуватися та покращити свої навички сканування мереж, підключення до систем, а також дасть практичний досвід роботи з основними інструментами тестування на проникнення.
Завдання
Вступ до Heartbleed та SSL/TLS
Наразі більшість веб-серверів налаштовані на використання SSL/TLS. SSL (Secure Socket Layer) є попередником TLS (Transport Layer Security). Найбільш поширеними версіями є TLS 1.2 та TLS 1.3 (нещодавно випущена). Налаштування веб-сервера на використання TLS означає, що вся комунікація між сервером і клієнтом буде зашифрована; будь-яка зловмисна третя сторона, яка отримає доступ до цього трафіку, не зможе зрозуміти/розшифрувати його, а також не зможе змінювати трафік. Щоб дізнатися більше про те, як встановлюються TLS з'єднання, ознайомтесь з версіями 1.2 та 1.3.
Heartbleed — це баг, пов'язаний з реалізацією в бібліотеці OpenSSL з версії 1.0.1 до 1.0.1f (яка дуже широко використовується). Він дозволяє користувачеві отримувати доступ до пам'яті на сервері (до якої зазвичай не має доступу). Це, в свою чергу, дозволяє зловмисному користувачу отримати доступ до різних видів інформації (до якої вони зазвичай не мали б доступу через шифрування та цілісність, забезпечувану TLS), зокрема:
- Приватний ключ сервера
- Конфіденційні дані, такі як імена користувачів, паролі та інша особиста інформація
Аналіз помилки
Помилка реалізації виникає в повідомленні про серцевий удар, яке OpenSSL використовує для підтримки з'єднання в активному стані, навіть якщо не передаються дані. Такий механізм важливий, тому що якщо з'єднання часто помирає/відновлюється, це буде дорого для повторного налаштування TLS-з'єднання; це впливає на затримку в Інтернеті і робить використання сервісів повільним для користувачів. Повідомлення серцевого удару, надіслане одним кінцем з'єднання, містить випадкові дані і довжину цих даних; ці дані надсилаються назад, коли їх отримує інший кінець з'єднання. Коли сервер отримує це повідомлення від клієнта, ось що він робить:
- Сервер створює вказівник (місце в пам'яті) на запис серцевого удару.
- Потім він копіює довжину даних, надісланих користувачем, у змінну (яка називається payload).
- Довжина цих даних не перевіряється.
- Сервер виділяє пам'ять у вигляді:
1 + 2 + payload + padding (це може бути максимум 1 + 2 + 65535 + 16)
- Сервер створює ще один вказівник (bp), щоб отримати доступ до цієї пам'яті.
- Сервер копіює кількість байтів payload з даних, надісланих користувачем, у вказівник bp.
- Сервер надсилає дані, що містяться у вказівниках bp, користувачу.
З цього можна побачити, що користувач контролює кількість і довжину даних, які він відправляє. Якщо користувач не надсилає жодних даних (де довжина 0), це означає, що сервер скопіює довільну пам'ять у новий вказівник (це і дає змогу отримати секретну інформацію на сервері).
Коли дані отримуються таким чином, вони можуть бути різними при кожному запиті, оскільки пам'ять на сервері буде змінюватися.
Виправлення
Щоб переконатися, що довільні дані з сервера не копіюються та не надсилаються користувачу, сервер повинен перевіряти довжину повідомлення серцевого удару:
Сервер повинен перевірити, що довжина повідомлення серцевого удару, надісланого користувачем, не дорівнює 0
Сервер повинен перевірити, що довжина не перевищує вказану довжину змінної, яка містить ці дані
Джерела:
http://heartbleed.com/
https://www.seancassidy.me/diagnosis-of-the-openssl-heartbleed-bug.html
https://stackabuse.com/heartbleed-bug-explained/
У цьому завданні потрібно отримати флаг, використовуючи дуже відому уразливість. Переконайтеся, що ви звертаєте увагу на всю інформацію та помилки, які відображаються. Особливу увагу слід приділити тому, як налаштовані веб-сервери.
Проведено початковий скан за допомогою Nmap, використовуючи скрипт уразливостей, для виявлення уразливості ssl-heartbleed.
Досліджено уразливість Heartbleed та її експлуатацію за допомогою Metasploit Framework.
Використано модуль auxiliary/scanner/ssl/openssl_heartbleed в Metasploit для експлуатації уразливості.
Налаштовані необхідні поля:
RHOSTS (цільовий хост) та Verbose (для детального виведення)
Успішно виконано експлойт і отримано флаг з журналів експлуатації.
Дякую за те, що знайшли час прочитати мій блог. Бажаю вам приємного навчання попереду!
Перекладено з: eJPT v2 : Challenge Lab 12: HeartBleed