Практическая работа №4
==
## Схема сети
Реализуем такую схему сети:

В целом она не отличается от предложенной в задании, но тестировать WAF с kali будет гордаздо проще, чем с хоста
## Установка nginx
В качетсве хоста для WAF выступает Ubuntu-22.04, на ней nginx не установлен
Добавим нужные репозитории:

Установим nginx:

Добавим исходный код к репозиторию
Поправим нужный файл с настройками репозитория:

Создадим папку для исходников:

Установим:

Загрузим исходный код:

Проверим - содержимое что надо (версии исходников и установленного nginx совпадают):

## Установка modsecurity
Качаем исходники:

Устанавливаем кучу зависимостей:

Устанавливаем и обновляем подмодули git:

Создаем окружение:

Производим настройки:

Компилируем:

После устанавливаем:

Скачаем ModSecurity-nginx Connector:

Устанавливаем зависимости:

Компилируем:

Собираем модули:

После переносим их:

Добавим в конфиг следующие строки:


Создадим директорию и файлы для modsecurity:

Настроим modsecurity
Включим активный мод:

Изменим параметры аудита:

Создадим еще один конфиг modsecurity:

Включим в него предыдущий:

Перенесем файл unicode.mapping:

Проверим корректность конфига - все ок:

Перезагрузим nginx:

## Установка правил
Скачаем правила:

Распакуем их:

Скопируем образец конфига:

Добавляем конфиги в конфиг modsecurity:

Проверяем конфиг:

Ребутаем nginx:

Проверим работу настроенного:


## Настройка приложения
Установим приложение bWAPP в виде докера (пропустил этап установки самого докера - уже было)
Скачаем докер bWAPP:

Запустим приложение:

Проверим локально (на машине с докером):

Настроим nginx в качестве reverse proxy для веб сервера:

Настройки в порядке:

Перезапускаем:

Проверяем в kali - все работает как нужно (зашли на ip WAF):

## Атаки и проверка WAF
Изначально я решил проверить три уязвимости:
- SQLi - часть A03:2021
- SSRF - A10:2021
- XXE - часть A05:2021
Но в процессе тестирования выяснил, что core rule set не защищает от SSRF и XXE, поэтому будем тестировать на примере SQLi, XSS, Command injection, хотя они все являются представителями A03:2021.
### SQL injection
Рассмотрим такое задание:

Судя по всему тут обычный union-based sqli, перехватим запрос:

Можно спокойно получить сообщение об ошибке:

Попробуем вставить комментарий - сразу блокируемся WAFом:

Попробуем запросить все записи (вставить верное условие через or) - блокирует:

Попробуем другие извороты:


Просто ввести слово union можно:

Пытаемся вытащить данные - блок:


Видим все блокировки в /var/log/nginx/error.log:

### Command injection
Перейдем к заданию command injection:

Перехватим запрос:

Команда whoami блокируется:

Команда id - нет:

Попробуем разные команды:




Видим сработки по command injection:

### XSS
Перейдем на задание:

Запрос:

Такой запрос пропускает (и получается текст заголовочный):

Попробуем обойти WAF:



Видим сработки в логах:
