Практическая работа №4 == ## Схема сети Реализуем такую схему сети: ![](https://i.imgur.com/uOQCI0k.png) В целом она не отличается от предложенной в задании, но тестировать WAF с kali будет гордаздо проще, чем с хоста ## Установка nginx В качетсве хоста для WAF выступает Ubuntu-22.04, на ней nginx не установлен Добавим нужные репозитории: ![](https://i.imgur.com/xaav6fZ.png) Установим nginx: ![](https://i.imgur.com/NqiZCZg.png) Добавим исходный код к репозиторию Поправим нужный файл с настройками репозитория: ![](https://i.imgur.com/ydoihUp.png) Создадим папку для исходников: ![](https://i.imgur.com/s90dSJm.png) Установим: ![](https://i.imgur.com/UvqEHyX.png) Загрузим исходный код: ![](https://i.imgur.com/UghXwdC.png) Проверим - содержимое что надо (версии исходников и установленного nginx совпадают): ![](https://i.imgur.com/Wx7BxlK.png) ## Установка modsecurity Качаем исходники: ![](https://i.imgur.com/qyowdjV.png) Устанавливаем кучу зависимостей: ![](https://i.imgur.com/W1We2fa.png) Устанавливаем и обновляем подмодули git: ![](https://i.imgur.com/iImSVvz.png) Создаем окружение: ![](https://i.imgur.com/lbGe0DQ.png) Производим настройки: ![](https://i.imgur.com/XeVi2ny.png) Компилируем: ![](https://i.imgur.com/jME5EHg.png) После устанавливаем: ![](https://i.imgur.com/7kjNCan.png) Скачаем ModSecurity-nginx Connector: ![](https://i.imgur.com/r53MMbh.png) Устанавливаем зависимости: ![](https://i.imgur.com/0rJOzkG.png) Компилируем: ![](https://i.imgur.com/7P675Ei.png) Собираем модули: ![](https://i.imgur.com/00uRLaO.png) После переносим их: ![](https://i.imgur.com/YqUIsUr.png) Добавим в конфиг следующие строки: ![](https://i.imgur.com/Zmla1M0.png) ![](https://i.imgur.com/zll85AE.png) Создадим директорию и файлы для modsecurity: ![](https://i.imgur.com/pOYcZns.png) Настроим modsecurity Включим активный мод: ![](https://i.imgur.com/4dpJvot.png) Изменим параметры аудита: ![](https://i.imgur.com/nNLNWK6.png) Создадим еще один конфиг modsecurity: ![](https://i.imgur.com/SFe6AyJ.png) Включим в него предыдущий: ![](https://i.imgur.com/kxQxIqI.png) Перенесем файл unicode.mapping: ![](https://i.imgur.com/35xIU1r.png) Проверим корректность конфига - все ок: ![](https://i.imgur.com/tHHm7Ng.png) Перезагрузим nginx: ![](https://i.imgur.com/rfFue0K.png) ## Установка правил Скачаем правила: ![](https://i.imgur.com/dpi7Mi8.png) Распакуем их: ![](https://i.imgur.com/qAqM26T.png) Скопируем образец конфига: ![](https://i.imgur.com/DMwIlct.png) Добавляем конфиги в конфиг modsecurity: ![](https://i.imgur.com/89sboLC.png) Проверяем конфиг: ![](https://i.imgur.com/DCJWuer.png) Ребутаем nginx: ![](https://i.imgur.com/4c6AxDa.png) Проверим работу настроенного: ![](https://i.imgur.com/vg815B1.png) ![](https://i.imgur.com/WH8MgpF.png) ## Настройка приложения Установим приложение bWAPP в виде докера (пропустил этап установки самого докера - уже было) Скачаем докер bWAPP: ![](https://i.imgur.com/YB3cQIE.png) Запустим приложение: ![](https://i.imgur.com/GxDs9g7.png) Проверим локально (на машине с докером): ![](https://i.imgur.com/KbmHDlj.png) Настроим nginx в качестве reverse proxy для веб сервера: ![](https://i.imgur.com/bXEgUk3.png) Настройки в порядке: ![](https://i.imgur.com/e8x2mrH.png) Перезапускаем: ![](https://i.imgur.com/fACacR9.png) Проверяем в kali - все работает как нужно (зашли на ip WAF): ![](https://i.imgur.com/aGmqjvt.png) ## Атаки и проверка WAF Изначально я решил проверить три уязвимости: - SQLi - часть A03:2021 - SSRF - A10:2021 - XXE - часть A05:2021 Но в процессе тестирования выяснил, что core rule set не защищает от SSRF и XXE, поэтому будем тестировать на примере SQLi, XSS, Command injection, хотя они все являются представителями A03:2021. ### SQL injection Рассмотрим такое задание: ![](https://i.imgur.com/n9UPnWX.png) Судя по всему тут обычный union-based sqli, перехватим запрос: ![](https://i.imgur.com/bZNwLBB.png) Можно спокойно получить сообщение об ошибке: ![](https://i.imgur.com/bHDtCR5.png) Попробуем вставить комментарий - сразу блокируемся WAFом: ![](https://i.imgur.com/ok3Fsr7.png) Попробуем запросить все записи (вставить верное условие через or) - блокирует: ![](https://i.imgur.com/TSgXqDM.png) Попробуем другие извороты: ![](https://i.imgur.com/4BUwB7k.png) ![](https://i.imgur.com/XQeKi7f.png) Просто ввести слово union можно: ![](https://i.imgur.com/hEprfm6.png) Пытаемся вытащить данные - блок: ![](https://i.imgur.com/Yl7RxbW.png) ![](https://i.imgur.com/RloJZpL.png) Видим все блокировки в /var/log/nginx/error.log: ![](https://i.imgur.com/IsuZBAX.png) ### Command injection Перейдем к заданию command injection: ![](https://i.imgur.com/iOpyt1e.png) Перехватим запрос: ![](https://i.imgur.com/al2Iaic.png) Команда whoami блокируется: ![](https://i.imgur.com/x4Eyx8B.png) Команда id - нет: ![](https://i.imgur.com/ZACPRgv.png) Попробуем разные команды: ![](https://i.imgur.com/b33o4F0.png) ![](https://i.imgur.com/z3sCC0Y.png) ![](https://i.imgur.com/Es8R1b8.png) ![](https://i.imgur.com/I4S0SrQ.png) Видим сработки по command injection: ![](https://i.imgur.com/jITav8I.png) ### XSS Перейдем на задание: ![](https://i.imgur.com/Fspz28U.png) Запрос: ![](https://i.imgur.com/5o5WSkJ.png) Такой запрос пропускает (и получается текст заголовочный): ![](https://i.imgur.com/mgv8qcS.png) Попробуем обойти WAF: ![](https://i.imgur.com/0qEr4WL.png) ![](https://i.imgur.com/dJqBxm7.png) ![](https://i.imgur.com/npBIPus.png) Видим сработки в логах: ![](https://i.imgur.com/NnSCINl.png)