Основы сети. Часть 7. Сетевые службы 1.
BagOs
Глава 7. СЕТЕВЫЕ СЛУЖБЫ 1.
- SMB.
- TELNET.
- FTP.
____________________________________________________________________________
§ 7.1. SMB.
7.1.1) SMB (SERVER MESSAGE BLOCK) — это сетевой протокол для удалённого доступа к файлам, принтерам и другим ресурсам в сети, и для межпроцессного взаимодействия. SMB работает по умолчанию через TCP-порт 445.
SMB позволяет пользователям и администраторам совместно использовать папки и делать их доступными удалённо для других пользователей. Часто в этих общих ресурсах есть файлы, содержащие конфиденциальную информацию, например пароли.
SAMBA — пакет программ для взаимодействия с Windows, выпущенный для систем Linux и Unix. Поскольку протокол SMB изначально разрабатывался под Windows, то с помощью SAMBA упрощается способ связи сетей Microsoft с Linux или macOS.
7.1.2) КАК РАБОТАЕТ SMB — протокол SMB работает в режиме «запрос-ответ», то есть он передаёт несколько сообщений между клиентом и сервером для установления соединения. Клиенты подключаются к серверам с помощью TCP/IP, NetBEUI или IPX/SPX:

Сначала клиент отправляет серверу SMB-запрос для установки соединения, а сервер отправляет обратно SMB-ответ, который разрешает соединение.
После установления соединения, клиенты могут отправлять SMB-команды на сервер, позволяющие им получить доступ к общедоступным ресурсам, открывать файлы, читать и записывать файлы и т. д. Всё это делается по сети.
7.1.3) ПРОНИКНОВЕНИЕ В SMB — это даст нам доступ к именам пользователей, паролям, сетевой информации, именам хостов, данным приложений, сетевым службам и любой другой ценной информации. Конфиденциальные данные могут находиться в общих сетевых папках, а некоторые версии SMB могут быть уязвимы для эксплойтов.
1 ЭТАП: Сканирование портов — провести сканирование портов можно с помощью Nmap:
В первом случае Nmap сканирует все службы на целевой системе.
Во втором случае Nmap сканирует службу SMB для определения версии ОС, имени компьютера, домена, рабочей группы и текущего времени по протоколу SMB.
2 ЭТАП: Поиск общих ресурсов SMB №1 — для этого будем использовать инструмент Enum4Linux, который находит общие ресурсы SMB в системах Windows и Linux. Он установлен по умолчанию на Kali и Parrot, однако его можно установить из github.
Параметры:
- -U — получить список пользователей.
- -M — получить список машин.
- -N — получить дамп списка имен (отличается от -U и -M).
- -S — получить общий список.
- -P — получить информацию о политике паролей.
- -G — получить группу и список участников.
- -a — полное базовое перечисление (включает все вышеперечисленные параметры).

Enum4Linux нашёл четыре общих ресурса: netlogon, profiles, print$, IPC$:

Но только к одному общему ресурсу profiles можно подключиться, поскольку для него выставлены нужные разрешения (хз что эти разрешения означают):

Поиск общих ресурсов SMB №2 — для этого будем использовать SMB-клиент для подключения (SMBClient установлен по умолчанию на Kali и Parrot, но его можно установить из официального сайта):

- -L — указывает, что хотим получить список общих ресурсов общих ресурсов на удаленном хосте.
- -N — игнорирует запрос пароля.
3 ЭТАП: Использование уязвимостей SMB — лучший способ проникновения в систему с SMB связан с неправильными настройками целевой системы. Мы будем использовать анонимный доступ к общему ресурсу SMB-сервера, позволяющий получить информацию, которая приведёт к получению командной оболочки (shell).
* ( альтернативная уязвимость): также существует уязвимость CVE-2017-7494, которая позволяет удалённое выполнение кода с помощью SMB. Но пока сосредоточимся на анонимном доступе.
Поскольку мы хотим получить доступ к общему ресурсу SMB, нам нужен SMB-клиент для подключения. Будем использовать SMBClient, который является частью пакета Samba. SMBClient установлен по умолчанию на Kali и Parrot, но его можно установить из официального сайта.
Способ 1.

- profiles — общий ресурс, который мы нашли на 2 этапе.
- -U sriki — имя пользователя, которое задаётся произвольно.
- -p 445 — порт, на котором по умолчанию работает SMB.
Как только мы введём команду выше, SMBClient предложит нам ввести пароль. Этот момент нужно опустить, нажав на кнопку [Enter].
Способ 2.

- profiles — общий ресурс, который мы нашли на 2 этапе.
- -L — указывает, что хотим получить список общих ресурсов общих ресурсов на удаленном хосте.
- -N — игнорирует запрос пароля.
Получив доступ к общему ресурсу SMB, для взаимодействия с её каталогами нужно использовать SMB-команды, которые во многом схожи с Windows-командами. Для просмотра SMB-команд, нужно ввести команду help:

Выведем список каталогов в общем ресурсе SMB с помощью команды dir или ls:

Нас может заинтересовать каталог .ssh, который содержит ключи аутентификации, позволяющие пользователю аутентифицировать себя на сервере, а затем получить доступ к нему. Поэтому перейдём в этот каталог и выведем содержимое этого каталога:

В каталоге .ssh содержится три ssh-ключа, где для нас наиболее интересен ключ id_rsa. Загрузим этот ssh-ключ на наш компьютер с помощью команды get id_rsa или mget id_rsa:

Ssh-ключ «id_rsa» скачался на наш компьютер:

4 ЭТАП: Далее нужно заменить разрешение этого ssh-ключа на «600» (хз зачем, но нужно), с помощью команды chmod 600 имяКлюча:

Теперь с помощью ssh-ключа «id_rsa» нужно войти в чужой ssh-клиент, прописав команду ssh -i имяКлюча имяПользователя@ipПользователя:

* Имя пользователя мы должны узнать покопавшись в файлах общего ресурса SMB. Команду выше нужно выполнить из папки, где находится ssh-ключ (например, если ключ находится в папке «Загрузки», то нужно перейти в эту папку и выполнить код подключения).
Готово! Мы получили обратную ssh-оболочку пользователя «cactus».
§ 7.2. TELNET.
§ 7.3. FTP.
7.3.1) FTP (FILE TRANSFER PROTOCOL) — это сетевой протокол для удалённой передачи файлов по сети. Данный протокол работает на прикладном уровне в модели TCP/IP. FTP работает по умолчанию через TCP-порт 21.
Для передачи команд и данных используется модель связи «клиент-сервер».
Защищенные версии протокола FTP: FTPS с использованием протокола TLS (порт 990) и SFTP с использованием протокола SSH (порт 22).
Более простая версия протокола FTP — TFTP, который выполняет передачу файлов между клиентскими и серверными процессами. Однако TFTP ненадежный протокол, он не обеспечивает аутентификацию пользователя и другие ценные функции в FTP, а также использует UDP-соединение. Поэтому TFTP может использоваться только в локальных и защищенных сетях.
Более подробно о протоколе FTP можно посмотреть здесь или здесь.
Атаки на FTP можно посмотреть здесь (§ 2.1.).
7.3.2) КАК РАБОТАЕТ FTP — FTP использует два канала для работы:
- Канал управления — используется для передачи команд, а также ответов на эти команды.
- Канал передачи данных — используется для передачи файлов.

ЭТАП 1. Клиент устанавливает связь с FTP-сервером, отправляя запрос на TCP-порт 21 (канал управления). Клиент отправляет команды на сервер, а сервер возвращает коды состояния.
ЭТАП 2. FTP-сервер открывает сессию с клиентом через собственный TCP-порт 20 (канал передачи данных). Этот канал используется исключительно для передачи файлов, а FTP-протокол отслеживает ошибки во время этого процесса.
После открытия сессии, все команды клиента будут отправляться по этому каналу. Пока сессия открыта, клиент может выполнять FTP-команды на сервере. Если соединение прерывается во время передачи файлов, то соединение может быть возобновлено после восстановления контакта.
[ПРОВЕРИТЬ ДОСТОВЕРНОСТЬ: Как только клиент запросит передачу другого файла, между клиентом и сервером будет установлено новое FTP-соединение, а прежнее FTP-соединение завершится. Это вызывает неудобство, поскольку клиент может вводить команды только в промежутках между передачами данных, что неэффективно при передаче больших файлов. Для решения этой проблемы были созданы активное и пассивное соединение].
7.3.3) АКТИВНЫЙ И ПАССИВНЫЙ РЕЖИМ FTP-СОЕДИНЕНИЯ:
- В активном режиме клиент устанавливает связь с сервером через TCP-порт 21 и сообщает ему на какой клиентский порт сервер может передавать свои ответы. Однако, если у клиента стоит брандмауэр, то сервер не сможет подключиться к клиентскому порту, поскольку брандмауэр блокирует все внешние подключения.
- В пассивном режиме клиент устанавливает связь с сервером через TCP-порт 21 и сообщает ему, что необходимо работать в пассивном режиме. Сервер открывает свой нестандартный порт (свыше 1023) и сообщает его клиенту. Затем клиент подключается к нестандартному порту сервера.
7.3.4) КОМАНДЫ И КОДЫ СОСТОЯНИЯ FTP:
I) КОМАНДЫ FTP:
- ls — показать список файлов.
- help — просмотреть все доступные команды на FTP-сервере.
- ascii — переключает режим передачи файлов на ASCII.
- binary — переключает режим передачи файлов на двоичный.
- get имяФайла — заставляет клиента и сервер установить другой канал для передачи файлов.
- cat имяФайла — теперь, когда у нас есть переданные файлы, мы можем их прочитать с помощью команды «cat».
- status — показать настройки FTP-сервера.
- touch имяФайла — загрузить файл (touch file.txt).
- put имяФайла — загрузить файлы из текущей папки на FTP-сервер.
II) КОДЫ СОСТОЯНИЯ FTP.
7.3.5) FTP-СЕРВЕРЫ:
I) vsFTPd — популярный FTP-сервер в дистрибутивах Linux. Установить сервер vsFTPd можно с помощью команды:
Конфигурации по умолчанию сервера vsFTPd можно найти в файле /etc/vsftpd.conf, где уже заданы некоторые настройки по умолчанию. Всевозможные настройки можно найти здесь.
В файле /etc/ftpusers можно прописать пользователей, которым нужно отказать в доступе к FTP-службе. В примере ниже, доступ запрещён троим пользователям, даже если они существуют в системе Linux:

НАСТРОЙКИ АНОНИМНОГО ВХОДА.
Одним из этих механизмов аутентификации в FTP-сервере является использование функции анонимного входа, чтобы позволить всем пользователям во внутренней сети обмениваться файлами и данными, не обращаясь к компьютерам друг друга. В vsFTPd настройки для анонимного входа в систему выглядят следующим образом:
- anonymous_enable=YES — разрешает анонимный вход в систему.
- anon_upload_enable=YES — разрешает анонимно загружать файлы.
- anon_mkdir_write_enable=YES — разрешает анонимному пользователю создавать новые каталоги в системе.
- no_anon_password=YES — не требует пароля от анонимного пользователя.
- anon_root=/home/username/ftp — задаёт каталог для анонимного пользователя.
- write_enable=YES — разрешает для анонимного пользователя использование следующих команд: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE и SITE.
УЯЗВИМЫЕ НАСТРОЙКИ FTP — эти настройки отвечают за безопасность, их неправильная настройка может привести к уязвимостям:
- dirmessage_enable=YES — отображает сообщение при первом входе в новый каталог (хз чё это).
- chown_uploads=YES — изменить право собственности на анонимно загруженные файлы.
- chown_username=имяПользователя — назначить пользователя, которому будет предоставлен доступ к анонимно загруженным файлам.
- local_enable=YES — разрешить локальным пользователям входить в систему.
- chroot_local_user=YES — поместить локальных пользователей в их домашний каталог.
- chroot_list_enable=YES — использовать список локальных пользователей, который будет размещен в их домашнем каталоге.
- hide_ids=YES — отображать всю информацию о пользователях и группах как «ftp».
- ls_recurse_enable=YES — позволяет использовать повторяющиеся списки.
Например, если в FTP-сервера есть настройка hide_ids=YES, то представление служб UID и GUID будет перезаписано, что затруднит нам обнаружение того, с какими правами эти файлы записываются и загружаются:

Эта настройка предотвращает раскрытие локальных имён пользователей. Зная имена пользователей, теоретически можно было бы атаковать сетевые службы (ftp, ssh и т.д) с помощью брутфорса. Но к счастью для разработчиков, от брутфорс-атак защищает fail2ban, который регистрирует IP-адрес и блокирует весь доступ к инфраструктуре после определенного количества неудачных попыток входа в систему.
Еще одна уязвимая настройка, которую мы можем использовать для атак является ls_recurse_enable=YES, которая нужна для лучшего обзора структуры каталогов FTP, поскольку эта настройка позволяет разработчикам видеть все содержимое каталогов одновременно:

Загрузка файлов с FTP-сервера с такой настройкой позволяет злоумышленникам использовать уязвимости LFI, чтобы заставить хост выполнять системные команды. Также возможны атаки на журналы FTP, что приводит к удаленному выполнению команды (RCE).
Мы также можем скачать все файлы и папки, к которым у нас есть доступ:

Как только мы скачаем все файлы, создастся каталог с именем IP-адреса нашей цели. Все загруженные файлы будут хранится.
II) ProFTPD
III) uFTP
7.3.6) FTP-КЛИЕНТЫ. Для FTP-клиентов есть встроенный инструмент FTP в терминале, а также инструмент с графическим интерфейсом FileZilla. Некоторые браузеры также поддерживают протокол FTP.
7.3.7) ПОДКЛЮЧЕНИЕ К FTP-СЕРВЕРУ — FTP отправляет и получает данные в незашифрованном виде, следовательно можно использовать инструмент Telnet (или Netcat) для связи с FTP-сервером и действовать как «FTP-клиент».
СПОСОБ №1 (ЧЕРЕЗ TELNET):
- Поскольку FTP-сервер использует порт 21, то подключаемся к порту 21 с помощью команды telnet IPсервераFTP 21.
- Вводим имя пользователя с помощью команды USER имяПользователя, например USER Jimi.
- Затем вводим пароль с помощью команды PASS пароль, например PASS 1234.
- Если имя имя пользователя и пароль верны, то мы войдём в систему.

Войдя в систему, можно прописать там следующие команды:
➤ STAT — предоставляет дополнительную информацию.
➤ SYST — показывает тип целевой системы.
➤ PASV — переключает режим на пассивный. Для FTP есть два режима:
- активный: в активном режиме данные отправляются по отдельному каналу, исходящему из порта TCP-порта 20 FTP-сервера.
- пассивный: в пассивном режиме данные отправляются по отдельному каналу, исходящему из порта выше 1023 FTP-клиента.
➤ TYPE A — переключает режим передачи файлов на ASCII.
➤ TYPE I — переключает режим передачи файлов на двоичный. Однако мы не сможем передать файл с помощью инструмента Telnet, потому что FTP создает отдельное соединение для передачи файла.

СПОСОБ №2 (ЧЕРЕЗ FTP-КЛИЕНТ):
- Подключаемся FTP-серверу с помощью команды: ftp IPсервераFTP.
- Вводим имя пользователя, например Jimi.
- Затем вводим пароль, например 1234.
- Если имя имя пользователя и пароль верны, то мы войдём в систему.

Войдя в систему, можно прописать там команды, прописанные сверху (пункт 7.3.4):