---
# System prepended metadata

title: Практическая работа №4

---

Практическая работа №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)
