###### tags: `INT`
# INT-7-Омаров_Джамалутин
*Выполнил Омаров Джамалутин*
## Особенности работы отдела безопасности сетевых (WEB) приложений
### Задание 1.
Openvpn подключен.

Проверим ping до хоста.

Попробывал использовать mfsconsole. Для прохождения по портам и поиска открытых портов TCP. Также попытался отправлять SYN и ACK пакеты, но эксплоит не запускался как на просто TCP. Думаю стоит ограничение. Получилось выявить 4 открытых порта со службами:
* ftp
* ssh
* ssh
* http

Кстати на данном ресурсе можно посмотреть код, при помощи которого можно протестировать уязвимость.

Также попробывал через nmap с флагами -sS -sT -sV -sS, также пробывал вариант без пинга -Pn. Результат тот же.

Написал скрипт, который проходит по портам. Получил имена определенных служб.

Вот имена(некоторые из них):

Также попробывал использовать сторонний скрипт. Результат такой же.

**Информация о сервисах**
На скриншоте представлены найденные сервисы на открытых портах.

Информация о версии дает нам возможность почитать в интернете о них, найти уязвимости в открытых источниках (CVE).
Найти информцию о версии vsftpd не удалось. Зато нашел информацию об уязвимых версиях OpenSSH. Куда входят наши.

Можно на CVE прочитать про уязвимость, а можно тут найти exploit.

На данном этапе я стал искать, что еще можно найти и прочитать про эти известные сервисы. Нашел скрипт, который установил на kali.

Он выдал необходимую мне информацию. Скриншоты приложу и дам пояснение.
ПОРТ 21 (ftp service):
Здесь представлена информация о том каким запросом получилось показать такую информацию. Порт, статут, сервис, версия сервиса, уязвимость, даже CVE ID.

ПОРТ 22 (OpenSSH 8.2p1)
Представлены алгоритмы, есть понимание, что подключение по ключу.

ПОРТ 2200 (OpenSSH 5.9p1)
Тоже подробная информация об используемых алгоритмах шифрования, криптографических алгоритмах и версия конечно же.

ПОРТ 4433 (HTTP)
Названия каталогов.

Также информация о сервисе.

Информация об SSL сертификации.

### Задание 2.
**CHECK 1**
Cначала отправляется запрос на URL `/bitrix/tools/composite_data.php`
Потом из полученного ответа вытаскивают значения PHPSESSID и bitrix_sess_id, дальше используя эти значения отправляет запрос на другой URL.
Также используются регулярные выражения, для того чтобы знать что подхватывать.

Далее видим параметр `FileUploader`, что сигнализирует нам о том, что мы загружаем (скорее всего исполняемый) файл. После этого нас ждет проверка:
Если получен код 200 и найдено совпадение того, что файл загружен **по ключевому слову или значению** (в нашем коде проверяется, что метод `.find("????...??")` вернул НЕ string::npos, что соответствует тому, что подстрока была успешно найдена в полученном ответе), тогда выводит сообщение, что сервис уязвим.

Проверяет наличие уязвимости Cross-Site Scripting. Является разновидностью атаки «Внедрение кода».
**CHECK 2**
При помощи UDP приложения могут посылать датаграммы другим хостам по IP-сети без необходимости предварительного сообщения для установки специальных каналов передачи или путей данных. Он быстрее TCP, его пакет меньше.
Подключается к указанному сокету не удалось подключиться - возвращает false.
Создаёт буфер notVulnRecv из каких-то четырёх байт.
Создаёт три разных буфера с разными значениями.
Пытается отправить пакет, в котором данные для проверки уязвимости, если не удалось отправить - возвращает false.
Если удалось отправить, считывает ответ из сокета:
* Если размер ответа меньше 4 байт ИЛИ если размер больше четырёх и ответ не заканчивается на 4 байта, сохранённых в notVulnRecv, считает уязвимым.
* Если ответ больше четырёх байт и заканчивается на 4 байта, сохранённых в notVulnRecv, возвращает false.

Дальше он пытается отправить пакет sendValidProbe. Если не отправилось успешно - вовзращает false.
Потом очищает recvMsg и считывает туда то, что есть в сокете.
Если там что-то есть - пишет, что уязвимый. а если сокет пустой - возвращает false.

Сложение по адресу 0+600 с регистром eax. Данный регистр аккумутирует значения. Далее сложение значения al регистра и ecx (по адресу 0). Al - младшие 8 бит AX регистра. Далее значение регистра eax складывается само с собой. Это был машинный код записанный в буфере sendVulnProbe.
Кстати последний 00 байт на буфере sendVulnProbe не отобразился при выводе disassembler'а.
А самый первый вывод disassembler'а - это то с чем сравнивают. В зависимости от результата сравнения делаем вердикт, уязвимость есть или нет.

**Другие методы проверок**
Фаззинг – методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные.
Проверки можно делать при помощи фаззера. Можно Фаззить сайты, можно фаззить протоколы. Описываем модель данных: делаем фаззер умнее, рассказываем ему о структуре файле или протокола (размерах полей, смещениях), с которым предстоит работать. Думаю действенный метод.
Выделяется три подхода к выявлению недостатков системы: тестирование методом черного, серого и белого ящиков. Различие между ними определяется теми ресурсами, которые доступны во время тестирования.
Достоинства:
* Уже написанные скрипты сэкономят время
* Первично могут подсказать, где возможно находится уязвимое место
* Автоматизировано
Недостатки:
* Есть вероятность понять в какую сторону двигаться, но что-то более углубленное с ним не попробуешь
* Скрипты на разных фаззерах делают одно и то же, разнообразия не получить
Пытаться внедрять тестировать вручную (можно получить базовые знания на Portswigger'е).
Достоинства:
* Твой скрипт возможно будет непохожим на другие
* Можно делать необычные запросы, использовать нестандартные подходы
* Если известно что-то о машине, можно кодить и проверять конкретные вещи
Недостатки:
* Время поиска, то есть если это blackBox recon, то лучше использовать Fazzer для начала иначе можно потерять время