Понимание протокола TFTP
Простой протокол передачи файлов, и вы
Уверяю вас, в TFTP нет ничего тривиального. На самом деле это довольно аккуратный протокол с некоторыми отличительными чертами. Этот протокол также является фаворитом злонамеренных хакеров для пересылки или извлечения файлов. TFTP тоже достаточно быстр, но о скорости TFTP чуть позже. Как и другие протоколы прикладного уровня, этот протокол передается по IP и, в свою очередь, использует UDP в качестве транспортного протокола.
Теперь у самого TFTP есть пять различных типов сообщений, которые он может использовать. Они следующие;
- RRQ, который вырывается как запрос на чтение
- WRQ, который вырывается как запрос на запись
- ACK, который выдается как подтверждение
- ОШИБКА, которая появляется как сообщение об ошибке
- ДАННЫЕ, которые вырываются как, чтобы прочитать или записать следующий блок данных
Теперь, если вам случится перехватить какие-либо пакеты TFTP по сети, вы увидите эти типы сообщений в самом пакете, как указано в пакете ниже. (Я подчеркнул это) TFTP также имеет ряд кодов ошибок, которые можно найти здесь. Если вы помните из нашего обсуждения HTTP и SMTP, у этих протоколов также были коды состояния и ошибки. Эти коды необходимы для создания согласованного обмена данными, который иногда может вызывать ошибки. Благодаря этим кодам, независимо от того, являются ли они состоянием или ошибкой, между клиентом и рассматриваемым сервером передаются различные условия.
Обычно протокол TFTP используется для хранения и извлечения файлов конфигурации коммутаторов Cisco IOS и Catalyst. Я также упоминал ранее, что хакеры активно используют этот протокол как средство извлечения и хранения файлов на взломанных компьютерах. Вы также не ограничены простой передачей содержимого ascii, вы также можете передавать двоичные файлы. Из-за такого использования TFTP злоумышленниками вы всегда должны с подозрением относиться к любому TFTP-трафику в вашей сети.
С шоу!
Я говорил это раньше, и я скажу это снова. Нет ничего лучше, чем «приложить практические усилия», чтобы закрепить усвоенные уроки. Имея это в виду, давайте взглянем на трафик TFTP. Ниже вы увидите небольшой фрагмент, а я прокомментирую непосредственно под рассматриваемым пакетом.
10:43:20.926155 IP (tos 0x0, ttl 128, id 69, смещение 0, флаги [нет], длина:
44 ) 192.168.1.102.1029 > 192.168.1.101.69: [udp sum ok] 16 RRQ «пример»
октет
0x0000: 4500 002c 0045 0000 8011 b660 c0a8 0166 E..,.E…..`…f
0x0010: c0a8 0165 0405 0045 0018 833b 0001 6578 …e…E…;..ex
0x0020: 616d 706c 6500 6f63 7465 7400 0000 достаточно. октет...
Этот трафик был собран с использованием другой версии Windump, поэтому он выглядит несколько иначе, чем то, к чему вы, возможно, привыкли. В пакете прямо над нами есть запрос на чтение файла «example». Запрос на чтение виден в RRQ, который подчеркнут выше. После этого в скобках указан файл, запрашиваемый с сервера TFTP, расположенного по адресу 192.168.1.101, на его порту 69. Порт 69 — это порт, связанный с TFTP, и он также находится в зарезервированном диапазоне портов от 0 до 1024. Мы также можем видеть, что «октет» следует за примером имени файла.
Октет означает, что данные будут передаваться восьмибитными байтами, в отличие от другого режима передачи «netascii». Если бы это был netascii, то TFTP интерпретировал бы пример файла как строки текста ascii и имел бы немного больше накладных расходов, которые я не буду здесь рассматривать. Наконец, я отмечу, что число 16 перед RRQ относится к объему данных TFTP, отправляемых в этом пакете. Если мы сделаем математику, это сработает. У нас есть общая длина пакета 44, как видно из заголовка. Заголовок IP составляет 20 байтов, а заголовок UDP — 8 байтов. Оставшиеся 16 байтов данных TFTP заполняют размер пакета до отмеченного общего размера 44 байта. Теперь, из-за разницы в размерах между TCP и UDP, становится ясно, почему UDP быстрее, т.е. он имеет на 12 байт меньше информации заголовка для отправки. Это обеспечивает быструю передачу файлов.
10:43:20.977012 IP (tos 0x0, ttl 64, id 8683, смещение 0, флаги [DF], длина:
130) 192.168.1.101.32768 > 192.168.1.102.1029: [плохая udp cksum 424c!] UDP,
длина: 102
0x0000: 4500 0082 21eb 4000 4011 9464 c0a8 0165 E…[email protected]@..d…e
0x0010: c0a8 0166 8000 0405 006e 849b 0003 0001 …f…..n……
0x0020: 5468 6520 6265 7374 2077 6179 2074 6f20 Лучший.способ.
0x0030: 6c65 6172 6e20 6162 6f75 7420 7468 696e узнать.о.тонком
0x0040: 6773 2069 7320 746f 200a 6163 7475 616c gs.is.to..actual
0x0050: 6c79 2064 6f20 6974 2079 6f75 7273 656c
0x0060: 662e 204d 7563 6820 6c69 6b65 2077 6861 f..Much.like.wha
0x0070: 740a 4920 616d 2064 6f69 6e67 206e 6f77 tIam.doing.now
0x0080:210а!.
Теперь то, что мы видим выше, — это TFTP-сервер, расположенный по адресу 192.168.1.101, отправляющий запрошенный файл «пример». Мы можем видеть в ascii-части пакета, что содержимое файла примера просто говорит мне, что лучший способ научиться — это сделать это самостоятельно.
10:43:20.979434 IP (tos 0x0, ttl 128, id 70, смещение 0, флаги [нет], длина:
32) 192.168.1.102.1029 > 192.168.1.101.32768: [udp sum ok] UDP, длина: 4
0x0000: 4500 0020 0046 0000 8011 b66b c0a8 0166 E….F…..k…f
0x0010: c0a8 0165 0405 8000 000c f7af 0004 0001 …e…………
0x0020: 0000 0000 0000 0000 0000 0000 0000 …………..
Обратите внимание, что этот пакет выше на самом деле является пакетом подтверждения. Довольно странно, не так ли, поскольку это UDP, а не TCP. Почему тогда мы видим пакет подтверждения? На самом деле это часть самого протокола TFTP и связанных с ним кодов операций. Где в приведенном выше пакете находится код операции, который вы говорите? Хороший вопрос! Мы знаем, что наш заголовок IP заканчивается на байтах 0165, так как это последние два октета IP-адреса назначения. Начиная с байта 0405, начинается заголовок UDP, который, в свою очередь, заканчивается байтом f7af.
Теперь мы знаем, что байты 0004 на самом деле представляют код операции для этого пакета. В этом случае значение равно четырем, и это выдает ACK или подтверждение. После этого значения кода операции следует номер блока 0001. Этот номер блока также виден в фактическом пакете, передающем содержимое файла «пример». Довольно аккуратно, а? Таким образом, вы получаете сеанс, ориентированный на соединение, даже если он основан на UDP. Однако это любезно предоставлено кодами операций TFTP.
Подведение итогов
Если вы хотите поиграть с протоколом TFTP, я рекомендую вам загрузить бесплатную версию, расположенную здесь. Добрые люди из Solarwinds были достаточно любезны, чтобы предложить этот превосходный TFTP-сервер на базе win32 бесплатно. Слава им! После того, как вы установили это в своей операционной системе win32, начните экспериментировать с пересылкой файлов туда и обратно с помощью команд «GET» и «PUT». При этом вы также должны прослушивать ваше соединение, чтобы затем посмотреть на полученный трафик. Вот и подошло к концу наше обсуждение протокола TFTP. Я искренне надеюсь, что вам понравилось. До следующего раза!