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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2023-25690 | Kitploit
Инструменты/GitHubGitHub/thanhlam-attt/cve-2023-25690
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и Образование
GitHubthanhlam-attt/cve-2023-25690

CVE-2023-25690

Репозиторий
412 лет назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2023-25690

Описание CVE-2023-25690:

  • Некоторые конфигурации mod_proxy в Apache HTTP Server с версии 2.4.0 по 2.4.55 допускают атаку HTTP Request Smuggling (техника атаки, вмешивающаяся в процесс обработки веб-сайтом последовательностей HTTP-запросов, полученных от одного или нескольких пользователей).
  • Эти конфигурации подвержены уязвимости, когда mod_proxy включён вместе с некоторыми формами RewriteRule или ProxyPassMatch, при которых удалённый злоумышленник может использовать эту уязвимость для обхода мер контроля доступа на прокси-сервере, тем самым перенаправляя нежелательные URL на исходный сервер.
  • Данная уязвимость позволяет злоумышленнику нацеливаться на внутренние приложения, скрытые прокси-сервером, и получать к ним доступ, что потенциально может привести к несанкционированному доступу, утечке данных или дальнейшей эксплуатации системы.

Эксперимент CVE-2023-25690

  • В качестве атакующей машины используется машина с Windows.
  • Backend-server и proxy-server развёрнуты через Docker на машине с Kali Linux.

Структура файлов лабораторной работы:

image

Модель эксперимента

image

  • IP-адрес машины Windows 10: 192.168.1.177
  • IP-адрес машины Kali Linux: 192.168.27.139
  • IP-адрес Backend-Server: 172.18.0.2
  • IP-адрес Proxy-Server: 172.18.0.3
  • Когда машина Windows 10 обращается к Apache HTTP Server, размещённому на машине Kali на порту 80, трафик перенаправляется на порт 80 Proxy-Server и далее передаётся на Backend-Server через порт 8080.

Требования к системе

  • Атакующая машина:
    • Операционная система Windows 10
    • Установленные инструменты: Pycharm, BurpSuite, VScode
    • Использование браузера FireFox и расширения FoxyProxy для настройки прокси
  • Машина жертвы:
    • Установленные инструменты и службы: Docker, Tcpdump
    • Настроенный Dockerfile (см. раздел приложения)

Цель эксплуатации: использовать уязвимость HTTP Request Smuggling для обхода ограничений прокси-сервера и доступа к скрытой функции на странице admin.php

Проведение эксперимента:

  • Используем BurpSuite Community, настроенный как прокси, для перехвата и изменения запросов.
  • В браузере устанавливаем расширение FoxyProxy и добавляем информацию о прокси: image
  • Включаем FoxyProxy на панели инструментов (в разделе расширений браузера), переключая с Turn Off на BurpSuite Commu: image
  • В BurpSuite включаем intercept (переключаем на on), чтобы перехватывать пакеты: image
  • На машине Kali с помощью команды cd переходим в папку лабораторной работы, где находится файл docker-composer.yml, и запускаем docker compose командой: docker-composer up --build

Проверка CRLF-инъекции:

  • Сначала отправляем на систему запрос, содержащий управляющие символы (CRLF), например: HTTP/1.1\r\nFoo: baarr\r\r\n\n, и кодируем URL как: %20HTTP/1.1%0d%0aFoo:%20baarr image => Можно заметить, что при вставке символов CRLF (%0d%0a) сервер обрабатывает наш запрос без каких-либо ошибок или ограничений, что показывает, что мы можем вставлять символы CRLF.

Проверка HTTP Request Smuggling:

  • Далее у нас есть следующий URI: /categories/1 HTTP/1.1\r\nHost: Localhost\r\n\r\nGET /SMUGGLED. После URL-кодирования получаем: /categories/1%20HTTP/1.1%0d%0aHost:%20localhost%0d%0a%0d%0aGET%20/SMUGGLED/ image
  • После применения RewriteRule видно, что URL будет проанализирован, и наш запрос после прохождения через прокси преобразуется в следующий формат: image
  • Можно заметить, что на один отправленный нами запрос сервер получает и возвращает целых 2 ответа: один от GET /categories и один от GET /SMUGGLED image

Эксплуатация HTTP Request Smuggling:

  • Предположим, что в файле httpd.conf мы настроили Proxy-Server на блокировку доступа к странице /admin/ image
  • Мы можем использовать HTTP Request Smuggling для обхода механизма проверки apache-proxy с помощью запроса: image
    • Проверив логи, мы видим, что успешно обошли apache-proxy, отправили запрос на /admin, и backend также вернул статус-код 200 для GET /admin image
    • Предположим, что в файле admin.php есть функция, выполняющая системную команду nslookup для запроса к любому домену, как показано ниже. Наша цель — обойти механизм прокси и получить доступ к этой скрытой функции для отправки DNS-запроса к любому домену; здесь мы запрашиваем нашу собственную машину Kali. image
    • У нас есть код эксплойта (файл CVE-2023-25690.py) и файл pre.txt (содержащий smuggled-запрос, который мы хотим пропустить через Proxy-Server для отправки запроса в систему, здесь — /admin.php). Этот код создаёт smuggling-запрос с нашим запросом, находящимся в файле pre.txt, и отправляет его на сервер. Также сохраняет результаты запроса и ответа в два соответствующих файла: req.txt и res.txt image
    • Одновременно на машине Kali используем TCPDUMP для перехвата DNS-пакетов на порту 53 image
  • Можно заметить, что отправленный нами запрос прошёл через прокси: прокси считает его допустимым запросом. Но на backend-server запрос анализируется с учётом управляющих символов, поэтому из одного запроса backend-server выделил 3 запроса: первый — GET /categories.php?id=1, второй — GET /admin.php?secret=192.168.1.194 и, наконец, GET /abc image

Приложение

Конфигурация файла Dockerfile в папке Backend

image

  • Этот файл конфигурации указывает, что Backend-Server использует образ PHP 7.4-apache — образ, содержащий PHP 7.4 вместе с веб-сервером Apache.
  • Вторая команда копирует всё содержимое из папки src/ в папку /var/www/html — это папка по умолчанию, которую Apache использует для построения веб-содержимого; также эту папку называют веб-корнем (web root).
  • Третья команда использует sed для замены всех вхождений 80 на 8080. Это позволяет изменить порт Apache по умолчанию внутри Backend-Server с 80 на 8080.
  • Четвёртая команда используется для обновления пакетов и установки пакета dnsutils — информацию об этом пакете можно посмотреть здесь: https://github.com/iagox86/dnsutils/blob/master/README.md
  • Последняя команда выполняется при запуске контейнера — это команда, использующая apache для запуска веб-сервера Apache.

Конфигурация файла Dockerfile в папке Frontend

image

  • Этот файл копирует файл httpd.conf из папки Frontend в файл /tmp/httd.conf и, наконец, помещает содержимое этого файла httpd.conf в файл /usr/local/apache2/conf/httpd.conf
  • Файл httpd.conf — это основной файл конфигурации Apache HTTP Server; этот файл определяет параметры конфигурации или действия на сервере — здесь это Proxy-Server.
  • Файл httpd.conf обычно устанавливается по пути /usr/local/apache2/conf/httpd.conf, поэтому мы должны поместить содержимое по пути /usr/local/apache2/conf/httpd.conf, а создание файла httpd.conf в папке Frontend позволяет более гибко настраивать Apache (не нужно переходить по указанному пути, чтобы переписывать файл httpd.conf).

Конфигурация файла docker-compose.yml:

image

  • Здесь определяются сервисы, сети и т.д., необходимые для запуска приложения.
  • Здесь мы объявляем два основных сервиса: apache-proxy и backend-server:
    • Apache-Proxy: построен на основе файла ./frontend/Dockerfile, сеть — backend-network (bridge). Кроме того, есть конфигурация depends_on: backend-server, указывающая, что Apache-Proxy может быть запущен только после завершения запуска Backend-Server. Наконец, ports: "80:80" задаёт проброс портов: весь трафик, поступающий на порт 80 хост-машины, будет перенаправляться на порт 80 контейнера.
    • Backend-Server: построен на основе файла ./backend/Dockerfile, сеть backend-network вместе с Proxy, чтобы они могли взаимодействовать друг с другом. Конфигурация expose открывает порт 8080, чтобы Apache-Proxy перенаправлял трафик на Backend-Server через этот порт. Наконец, добавлены некоторые функции безопасности, такие как запрет пользователю создавать новые права (добавлять, изменять, удалять файлы, добавлять права на процессы или сеть и т.д.) и фильтрация системных вызовов, выполняемых программой.

Конфигурация файла httpd.conf

image

  • Сначала настраивается хранение логов по двум путям: /use/local/apache2/logs/error.log и /use/local/apache2/logs/access.log
  • Затем загружаются необходимые модули для применения Rewrite Rule (правила перезаписи).
  • Далее указывается DocumentRoot — параметр в файле конфигурации Apache, который определяет, где находятся файлы данных сервера.
  • Затем применяется правило перезаписи для путей к /categories/ и /admin/.
  • И, наконец, блокируется отправка запросов на /admin/ — это делается для того, чтобы мы могли провести лабораторную работу по обходу прокси и доступу к этой странице.
Скачать инструмент
  • Таким образом, мы успешно отправили запрос на /admin.php — туда, куда прокси не разрешает отправлять запросы. image => Проверив TCPDUMP, мы видим, что TCPDUMP перехватил DNS-пакеты, отправленные на наш адрес, — значит, скрытая функция в /admin.php была успешно выполнена.