---
# System prepended metadata

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

---

# Web.Практическая работа № 4
## 4.0 Схема стенда
Схема нашей сети.
Атаки будем проводить с Kali, для этого разместим еще один коммутатор в DMZ. Подлючим в него Internet, Kali, WAF. IP план такой:
- Kali - 192.168.225.111, gw 192.168.225.1, dns 8.8.8.8
- WAF - 192.168.225.254, 10.1.1.1, gw 192.168.225.1, dns 8.8.8.8
- WEB - 10.1.1.225, gw 10.1.1.1, dns 8.8.8.8

![](https://i.imgur.com/M7Rpivy.png)

## 4.1 Установка и настройка машины с веб приложением
Данное веб приложение поднимали в практической работе №1, поэтому тут подробно описывать не будем.

Настроим сеть на машине
![](https://i.imgur.com/RzmnGTY.png)
![](https://i.imgur.com/OiOaCyk.png)
![](https://i.imgur.com/jyJDKEw.png)
![](https://i.imgur.com/OSlymmN.png)

Проверим работу сети
![](https://i.imgur.com/h5CKFzg.png)

---

Обновим машину
![](https://i.imgur.com/gltO0L6.png)
![](https://i.imgur.com/ZSwf0AL.png)

Установим необходимые пакеты
![](https://i.imgur.com/gS1IJI0.png)
![](https://i.imgur.com/fMQA8Bd.png)
![](https://i.imgur.com/QU2Y2CJ.png)
![](https://i.imgur.com/9f3efAN.png)

---
Добавим ключи от репозитория docker
![](https://i.imgur.com/0fkCTkv.png)

---
Обновим информацию о пакетах. Установим docker
![](https://i.imgur.com/cMm6T9z.png)
![](https://i.imgur.com/U9lpbs3.png)
![](https://i.imgur.com/TfJ82hD.png)

---

Включим, запустим и проверим состояние docker
![](https://i.imgur.com/0odqv8r.png)

Скачаем
![](https://i.imgur.com/HbevWPv.png)
И запустим наше веб приложение
![](https://i.imgur.com/b5wrSUD.png)

## 4.2 Настройка WAF
### 4.2.1 Настройка машины для WAF
Разрешим пропускать через себя трафик
```bash=
sudo nano /etc/sysctl.conf
```
![](https://i.imgur.com/bVRRXM9.png)

----
```bash=
net.ipv4.ip_forward=1
```
![](https://i.imgur.com/OktkQXQ.png)

---

Посмотрим текущую адресацию
```bash=
ip address
```
![](https://i.imgur.com/9wbiFPO.png)

---

Установим адресацию
```bash=
sudo ip address add 192.168.225.254/24 dev ens4
sudo ip link set up dev ens4
sudo ip route add default via 192.168.225.1
sudo ip addess add 10.1.1.1/24 dev ens3
ip address
sudo ip link set up dev ens3
ip address
```
![](https://i.imgur.com/pfjBo7e.png)

---

Проверим работу сети
```bash=
ping 192.168.225.1
ping 8.8.8.8
```
![](https://i.imgur.com/odtuWLT.png)

---

Для сети 10.1.1.0/24 нужен NAT. Настроим его средствами iptables.
Посмотрим таблицы. Настроим NAT. Проверим результат.

```bash=
sudo iptables -t nat -L
sudo iptables -t nat -A POSTROUTING -o ens4 -s 10.1.1.1/24 -j MASQUERADE
sudo iptables -t nat -L
```
![](https://i.imgur.com/nCj3Xrs.png)

---

Настроим dns
```bash=
sudo nano /etc/resolv.conf
```
![](https://i.imgur.com/bWaUKF2.png)

---

Возьмемь google
```bash=
nameserver 8.8.8.8
```
![](https://i.imgur.com/Nu6KlMg.png)

---

Проверим работу dns
```bash=
ping google.com
```
![](https://i.imgur.com/qM8BtPH.png)

---

Обновим информацию о пакетах
```bash=
sudo apt update
```
![](https://i.imgur.com/TMDmrOa.png)

---

Обновим сами пакеты
```bash=
sudo apt upgrade
```
![](https://i.imgur.com/tMynVCN.png)

---

Установим пакет поддержки сохранения правил iptables
```bash=
sudo apt install iptables-persistent
```
![](https://i.imgur.com/hoXB0jA.png)
![](https://i.imgur.com/yS32Rw7.png)

---


### 4.2.2 Настройка и конфигурирование WAF

Обновим пакеты
```bash=
sudo apt update -y && sudo apt upgrade -y
```
![](https://i.imgur.com/TRLxf5I.png)


----

Установим необходимые пакеты
```bash=
sudo apt install dpkg-dev git gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen curl unzip
```
![](https://i.imgur.com/I5dxFN0.png)
![](https://i.imgur.com/xsSZTlc.png)


----


Добавим репозиторий NGINX
Нам необходим также и исходный код, однако, добавление репозитория через официальную установку, не работает, т.к. после изменения файла(add deb-scr) перестает проверяться подпись. Поэтому добавим репозиторий прямо в соурс лист и сделаем доверенным.
![](https://i.imgur.com/ZHNfD2E.png)



Обновим информацию о пакетах
```bash=
sudo apt update
```
![](https://i.imgur.com/acYNuE2.png)


Установим NGINX
```bash=
sudo apt install nginx-core nginx-common nginx nginx-full
```
![](https://i.imgur.com/0Qv7uYz.png)
![](https://i.imgur.com/nO23Bso.png)

----
Создадим каталог для исходного кода
```bash=
sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx
```
![](https://i.imgur.com/Ar4Hh7u.png)

----
Настроим права
```bash=
sudo chown user:user /usr/local/src/ -R
```
![](https://i.imgur.com/1wmALzt.png)

----
Скачаем исходники
```bash=
sudo apt source nginx
```
![](https://i.imgur.com/nExh1hf.png)

----

Посмотрим что в каталоге, проверим версию NGINX
```bash=
ls
sudo nginx -v
```
![](https://i.imgur.com/zHJnt7o.png)


----



Склонируем репозиторий с ModSecurity

```bash=
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/
cd /usr/local/src/ModSecurity
```
![](https://i.imgur.com/gz3sEI8.png)


----

Инициализируем и обновим сабмодули
```bash=
git submodule init
git submodule update
```
![](https://i.imgur.com/4PiIPrC.png)

----
Билд
```bash=
./build.sh
```
![](https://i.imgur.com/vnl9cwl.png)

----

Конфигурация
```bash=
./configure
```
![](https://i.imgur.com/7JQQbu4.png)
![](https://i.imgur.com/DUHGF5c.png)
![](https://i.imgur.com/Rn3FVoj.png)

----

Компиляция ModSecurity
```bash=
make -j 4
```
![](https://i.imgur.com/qGe8tdL.png)
![](https://i.imgur.com/HJiqtdy.png)
![](https://i.imgur.com/MklGPMq.png)

----

Установим ModSecurity
```bash=
sudo make install
```
![](https://i.imgur.com/gdTH0dF.png)
![](https://i.imgur.com/PKqMvEJ.png)


----

Посмотрим что в каталоге
```bash=
ls /usr/local/modsecurity
```
![](https://i.imgur.com/ZRhCgr2.png)

----

Склонируем репозиторий коннектора ModSecurity к NGINX. Перейдем в каталог NGINX.
```bash=
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/
cd /usr/local/src/nginx/nginx-1.23.1
```
![](https://i.imgur.com/B5SV8Zm.png)

----
```bash=

Установим необходимые зависимости
sudo apt build-dep nginx && sudo apt install uuid-dev
```
![](https://i.imgur.com/pQyU8BF.png)
![](https://i.imgur.com/jQXneun.png)


----

Сконфигурируем
```bash=
sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx
```
![](https://i.imgur.com/diU4fAU.png)
![](https://i.imgur.com/n60bTbg.png)


----

И соберем
```bash=
sudo make modules
```
![](https://i.imgur.com/vwDfvcp.png)

----

Скопируем собранный модуль в NGINX. Создадим необходимые каталоги. Скопируем конфигурацию и маппинг.
```bash=
sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/
sudo mkdir /etc/nginx/modsec/
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/
```
![](https://i.imgur.com/N6DQWrL.png)

----

Настроим NGINX
```bash=
sudo nano /etc/nginx/nginx.conf
```
![](https://i.imgur.com/Jwvmz59.png)

----

Подгрузим модуль, включим ModSecurity, укажем конфигурацию.
```bash=
load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;
```
![](https://i.imgur.com/HnDoitN.png)

----

Настроим ModSecurity.
```bash=
sudo nano /etc/nginx/modsec/modsecurity.conf
```
![](https://i.imgur.com/LfeWtZv.png)

----

Переключим ModSecurity с Only Detect на активную защиту.
Приведем описание ключей:
- A 	Audit log header (mandatory)
- B 	Request headers
- C 	Request body
- D 	Reserved
- E 	Response body
- F 	Response headers
- G 	Reserved
- H 	Audit log trailer, which contains additional data
- I 	Compact request body alternative (to part C), which excludes files
- J 	Information on uploaded files
- K 	Contains a list of all rules that matched for the transaction
- Z 	Final boundary (mandatory)
```bash=
SecRuleEngine On
SecAuditLogParts ABCEFHJKZ
```
![](https://i.imgur.com/rJUyUw0.png)
![](https://i.imgur.com/04zusWp.png)

----

Создадим конфиг файл.
```bash=
sudo nano /etc/nginx/modsec/modsec-config.conf
```
![](https://i.imgur.com/RMwzM5L.png)

----

Будем включать в него конфигурации
```bash=
Include /etc/nginx/modsec/modsecurity.conf
```
![](https://i.imgur.com/yLTi3DL.png)

----


Протестируем настройки NGINX
```bash=
sudo nginx -t
```
![](https://i.imgur.com/SymDWTq.png)

----

Перезапустим NGINX, проверим результат
```bash=
sudo systemctl restart nginx
sudo systemctl status nginx
```
![](https://i.imgur.com/2BeGgY3.png)

----

Теперь добавим в ModSecurity набор правил OWASP core.
Скачаем набор правил

```bash=
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip
```
![](https://i.imgur.com/uA0SO7N.png)


----

Распакуем набор правил в каталог modsec
```bash=
sudo unzip v3.3.2.zip -d /etc/nginx/modsec/
```
![](https://i.imgur.com/m4FnnjN.png)
![](https://i.imgur.com/Pwg29Ph.png)


----

Скопируем конфигурацию правил
```bash=
sudo cp /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
```
![](https://i.imgur.com/VdbCZyC.png)

----

Откроем наш конфиг
```bash=
sudo nano /etc/nginx/modsec/modsec-config.conf
```
![](https://i.imgur.com/kBI5udZ.png)

----

Добавим в него конфиги правил
```bash=
Include /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.2/rules/*.conf
```
![](https://i.imgur.com/SaJIxgW.png)

----

Протестируем изменнения
```bash=
sudo nginx -t
```
![](https://i.imgur.com/UOLSasy.png)

----

Перезапустим и проверим NGINX
```bash=
sudo systemctl restart nginx
sudo systemctl status nginx
```
![](https://i.imgur.com/FRTYcR3.png)

----

Посмотрим конфиг набора

```bash=
sudo nano /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
```
![](https://i.imgur.com/BTnTmVg.png)
![](https://i.imgur.com/pJZR9C9.png)
![](https://i.imgur.com/2YuI2mh.png)


----
Создадим файл для ротации логов
```bash=
sudo nano /etc/logrotate.d/modsec
```
![](https://i.imgur.com/hpkVmYj.png)

----

Настроим ротацию логов
```bash=
/var/log/modsec_audit.log
{
        rotate 31
        daily
        missingok
        compress
        delaycompress
        notifempty
}
```
![](https://i.imgur.com/53paiJd.png)

----

Настроим проксирование нашего сайта через NGINX. Проксировать будем по пути ./juice
Отредактируюем конфиг
```bash=
sudo nano /etc/nginx/sites-available/default
```

![](https://i.imgur.com/vJ28gVT.png)

Перезапустим NGINX

![](https://i.imgur.com/OdEe8Et.png)

Проверим проксирование на Kali указав адрес NGINX.

![](https://i.imgur.com/KT6XJQh.png)

Проверим что WAF работает
![](https://i.imgur.com/MeZ39kH.png)

----


## 4.3 Проведение атак из OWASP TOP 10
### 4.3.0
Для демонстации работы WAF выполним три атаки:
- SSRF RCE
- SQL Ijection
- XSS
С целью простоты демонстации, атаки будем выполнять вручную. Будем использовать форму логона.

---

### 4.3.1 Server-Side Request Forgery (SSRF) RCE
Попробуем получить доступ к локльному файлу.
```bash=
<span file://etc/passwd</span>
```
Рузультат в браузере
![](https://i.imgur.com/La04orD.png)
Рузультат в логах modsecurity
![](https://i.imgur.com/BrqPph2.png)

---


### 4.3.2 SQL injection
Попробуем простейшую SQL иньекцию
```bash=
'or '1'='1
```
Результат в браузере
![](https://i.imgur.com/hgZVs0l.png)
Лог WAF
![](https://i.imgur.com/YpSRQ68.png)

---

### 4.3.3 XSS
Создадим простейший XSS
```bash=
<script>alert(document.domain)</scrit>
```
Результат в браузере
![](https://i.imgur.com/ZhKgppZ.png)
Результат в логах
![](https://i.imgur.com/AVapqAf.png)


---
На этом данная работа завершена. WAF с правилами OWASP работает.
