###### tags: `INT` # INT-7-Омаров_Джамалутин *Выполнил Омаров Джамалутин* ## Особенности работы отдела безопасности сетевых (WEB) приложений ### Задание 1. Openvpn подключен. ![](https://i.imgur.com/NtVEdly.png) Проверим ping до хоста. ![](https://i.imgur.com/qtWaUJG.png) Попробывал использовать mfsconsole. Для прохождения по портам и поиска открытых портов TCP. Также попытался отправлять SYN и ACK пакеты, но эксплоит не запускался как на просто TCP. Думаю стоит ограничение. Получилось выявить 4 открытых порта со службами: * ftp * ssh * ssh * http ![](https://i.imgur.com/Sav9O9d.png) Кстати на данном ресурсе можно посмотреть код, при помощи которого можно протестировать уязвимость. ![](https://i.imgur.com/ZFW80NB.png) Также попробывал через nmap с флагами -sS -sT -sV -sS, также пробывал вариант без пинга -Pn. Результат тот же. ![](https://i.imgur.com/OOt8CRh.png) Написал скрипт, который проходит по портам. Получил имена определенных служб. ![](https://i.imgur.com/r6f1HyR.png) Вот имена(некоторые из них): ![](https://i.imgur.com/GdZRtmY.png) Также попробывал использовать сторонний скрипт. Результат такой же. ![](https://i.imgur.com/vkoQ3qn.png) **Информация о сервисах** На скриншоте представлены найденные сервисы на открытых портах. ![](https://i.imgur.com/yzprgWu.png) Информация о версии дает нам возможность почитать в интернете о них, найти уязвимости в открытых источниках (CVE). Найти информцию о версии vsftpd не удалось. Зато нашел информацию об уязвимых версиях OpenSSH. Куда входят наши. ![](https://i.imgur.com/SBJVFig.png) Можно на CVE прочитать про уязвимость, а можно тут найти exploit. ![](https://i.imgur.com/3aFt916.png) На данном этапе я стал искать, что еще можно найти и прочитать про эти известные сервисы. Нашел скрипт, который установил на kali. ![](https://i.imgur.com/eeG3Eta.png) Он выдал необходимую мне информацию. Скриншоты приложу и дам пояснение. ПОРТ 21 (ftp service): Здесь представлена информация о том каким запросом получилось показать такую информацию. Порт, статут, сервис, версия сервиса, уязвимость, даже CVE ID. ![](https://i.imgur.com/2EnrgxO.png) ПОРТ 22 (OpenSSH 8.2p1) Представлены алгоритмы, есть понимание, что подключение по ключу. ![](https://i.imgur.com/s6w0pla.png) ПОРТ 2200 (OpenSSH 5.9p1) Тоже подробная информация об используемых алгоритмах шифрования, криптографических алгоритмах и версия конечно же. ![](https://i.imgur.com/2ffQ7PX.png) ПОРТ 4433 (HTTP) Названия каталогов. ![](https://i.imgur.com/o1pIr8L.png) Также информация о сервисе. ![](https://i.imgur.com/Qbsl8DW.png) Информация об SSL сертификации. ![](https://i.imgur.com/eFQcl4Y.png) ### Задание 2. **CHECK 1** Cначала отправляется запрос на URL `/bitrix/tools/composite_data.php` Потом из полученного ответа вытаскивают значения PHPSESSID и bitrix_sess_id, дальше используя эти значения отправляет запрос на другой URL. Также используются регулярные выражения, для того чтобы знать что подхватывать. ![](https://i.imgur.com/Evsmqgj.png) Далее видим параметр `FileUploader`, что сигнализирует нам о том, что мы загружаем (скорее всего исполняемый) файл. После этого нас ждет проверка: Если получен код 200 и найдено совпадение того, что файл загружен **по ключевому слову или значению** (в нашем коде проверяется, что метод `.find("????...??")` вернул НЕ string::npos, что соответствует тому, что подстрока была успешно найдена в полученном ответе), тогда выводит сообщение, что сервис уязвим. ![](https://i.imgur.com/jXFSnaP.png) Проверяет наличие уязвимости Cross-Site Scripting. Является разновидностью атаки «Внедрение кода». **CHECK 2** При помощи UDP приложения могут посылать датаграммы другим хостам по IP-сети без необходимости предварительного сообщения для установки специальных каналов передачи или путей данных. Он быстрее TCP, его пакет меньше. Подключается к указанному сокету не удалось подключиться - возвращает false. Создаёт буфер notVulnRecv из каких-то четырёх байт. Создаёт три разных буфера с разными значениями. Пытается отправить пакет, в котором данные для проверки уязвимости, если не удалось отправить - возвращает false. Если удалось отправить, считывает ответ из сокета: * Если размер ответа меньше 4 байт ИЛИ если размер больше четырёх и ответ не заканчивается на 4 байта, сохранённых в notVulnRecv, считает уязвимым. * Если ответ больше четырёх байт и заканчивается на 4 байта, сохранённых в notVulnRecv, возвращает false. ![](https://i.imgur.com/CvjDgF3.png) Дальше он пытается отправить пакет sendValidProbe. Если не отправилось успешно - вовзращает false. Потом очищает recvMsg и считывает туда то, что есть в сокете. Если там что-то есть - пишет, что уязвимый. а если сокет пустой - возвращает false. ![](https://i.imgur.com/9fj3IVZ.png) Сложение по адресу 0+600 с регистром eax. Данный регистр аккумутирует значения. Далее сложение значения al регистра и ecx (по адресу 0). Al - младшие 8 бит AX регистра. Далее значение регистра eax складывается само с собой. Это был машинный код записанный в буфере sendVulnProbe. Кстати последний 00 байт на буфере sendVulnProbe не отобразился при выводе disassembler'а. А самый первый вывод disassembler'а - это то с чем сравнивают. В зависимости от результата сравнения делаем вердикт, уязвимость есть или нет. ![](https://i.imgur.com/5PRZolS.png) **Другие методы проверок** Фаззинг – методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные. Проверки можно делать при помощи фаззера. Можно Фаззить сайты, можно фаззить протоколы. Описываем модель данных: делаем фаззер умнее, рассказываем ему о структуре файле или протокола (размерах полей, смещениях), с которым предстоит работать. Думаю действенный метод. Выделяется три подхода к выявлению недостатков системы: тестирование методом черного, серого и белого ящиков. Различие между ними определяется теми ресурсами, которые доступны во время тестирования. Достоинства: * Уже написанные скрипты сэкономят время * Первично могут подсказать, где возможно находится уязвимое место * Автоматизировано Недостатки: * Есть вероятность понять в какую сторону двигаться, но что-то более углубленное с ним не попробуешь * Скрипты на разных фаззерах делают одно и то же, разнообразия не получить Пытаться внедрять тестировать вручную (можно получить базовые знания на Portswigger'е). Достоинства: * Твой скрипт возможно будет непохожим на другие * Можно делать необычные запросы, использовать нестандартные подходы * Если известно что-то о машине, можно кодить и проверять конкретные вещи Недостатки: * Время поиска, то есть если это blackBox recon, то лучше использовать Fazzer для начала иначе можно потерять время