Протокол TFTP
Протокол TFTP и Вы
Протокол TFTP необычный, как может показаться из его названия. Это хорошо сделанный протокол с характерными функциями. Протокол является излюбленным для хакеров, когда они хотят отправить или получить какие-либо файлы. TFTP достаточно быстр, но мы коснемся его скорости немного позже. Так же как большинство других протоколов прикладного уровня, TFTP передается по IP и использует пользовательский протокол данных (UDP ) в качестве протокола передачи.
В протоколе TFTP содержатся 5 сообщений:
- RRQ, которое выводится как запрос на чтение
- WRQ, которое выводится как запрос на запись
- ACK, которое выводится как сообщение подтверждения
- ERROR, которое выводится как сообщение об ошибке
- DATA, которое выводится как сообщение на чтение или запись следующей части данных
Когда вы натолкнетесь на пакеты TFTP, вы сможете увидеть такие сообщения в самом пакете. В протоколе TFTP содержатся также коды ошибок, которые вы сможете увидеть ниже. Насколько вы помните, в наших рассказах о протоколах HTTP и SMTP мы говорили, что в них тоже есть коды ошибок и состояния. В функции данных кодов входит создание связанного обмена данными, в которых иногда могут быть ошибки. Данные коды рассматривают различные условия обмена данными между клиентом и сервером.
Протокол TFTP обычно используется для хранения и поиска файлов настроек переключателей Cisco IOS и Catalyst. Я уже упоминал, что хакеры используют его для поиска и хранения файлов на атакуемых компьютерах. Вы не ограничены возможностью передачи содержимого ascii, вы можете передавать также и двоичные файлы. Так как протокол является излюбленным у хакеров, вы всегда должны относиться с подозрением к трафику TFTP на своем компьютере.
Продолжаем!
Я уже говорил, но повторю еще раз: практика - это лучший способ обучения. Поэтому давайте взглянем на трафик TFTP. Далее пойдут небольшие отрывки с моими комментариями.
10:43:20.926155 IP (tos 0x0, ttl 128, id 69, offset 0, flags [none], length:
44) 192.168.1.102.1029 > 192.168.1.101.69: [udp sum ok] 16 RRQ "example"
octet
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 ample.octet...
Данный трафик был получен с помощью иной версии windump, и выглядит он поэтому несколько иначе, чем тот, к которому вы более привычны. В верхнем пакете представлен запрос на чтение для файла «example». Это видно из подчеркнутой записи RRQ. Далее в скобках следует файл, который запрашивается с сервера TFTP, расположенного по адресу 192.168.1.101 на порту 69. Этот порт ассоциируется с TFTP и находится в зоне от 0 до 1024. Мы также можем видеть запись “octet”, которая следует за именем файла.
Октет означает, что данные будут переданы в 8-разрядных байтах в отличие от другого типа передачи «netascii». В этом случае TFTP воспринял бы файл «example» как строки текста ascii, но я не буду останавливаться на этом подробно. Наконец я покажу, что 16 в сообщении RRQ относится к количеству данных TFTP, отправленных в пакете. Это хорошо видно при элементарном подсчете. Длина пакета составляет 44, как видно из заголовка. IP заголовок состоит из 20 байт, а заголовок UDP – из 8. Оставшиеся 16 байт данных TFTP заключены в самом пакете. Различия в размерах между TCP и UDP объясняет, почему UDP быстрее: на 12 байт заголовочной информации меньше для отправки. Это ускоряет пересылку файлов.
10:43:20.977012 IP (tos 0x0, ttl 64, id 8683, offset 0, flags [DF], length:
130) 192.168.1.101.32768 > 192.168.1.102.1029: [bad udp cksum 424c!] UDP,
length: 102
0x0000: 4500 0082 21eb 4000 4011 9464 c0a8 0165 E...!.@.@..d...e
0x0010: c0a8 0166 8000 0405 006e 849b 0003 0001 ...f.....n......
0x0020: 5468 6520 6265 7374 2077 6179 2074 6f20 The.best.way.to.
0x0030: 6c65 6172 6e20 6162 6f75 7420 7468 696e learn.about.thin
0x0040: 6773 2069 7320 746f 200a 6163 7475 616c gs.is.to..actual
0x0050: 6c79 2064 6f20 6974 2079 6f75 7273 656c ly.do.it.yoursel
0x0060: 662e 204d 7563 6820 6c69 6b65 2077 6861 f..Much.like.wha
0x0070: 740a 4920 616d 2064 6f69 6e67 206e 6f77 t.I.am.doing.now
0x0080: 210a !.
Выше представлен запрашиваемый файл “example”, отправляемый сервером TFTP, который расположен по адресу 192.168.1.101. Из части ascii пакета видно, что содержанием файла является сообщение о том, что лучший способ обучения - это самостоятельная практика.
10:43:20.979434 IP (tos 0x0, ttl 128, id 70, offset 0, flags [none], length:
32) 192.168.1.102.1029 > 192.168.1.101.32768: [udp sum ok] UDP, length: 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 адреса места назначения. Заголовок UDP начинается с байтов 0405 и заканчивается на байтах f7af.
Таким образом становится понятно, что байты 0004 представляют собой код операции для данного пакета. В этом случае значение равняется 4, и выводится сообщение подтверждения. После значения кода операции следует номер блока 0001. Он также виден в пакете, передающем содержание файла “example”. Довольно просто, не так ли? Таким образом, вы получаете подключение, пригодное для сессии, даже если она основана на UDP. Это и является функцией кодов операции TFTP.
Заключение
Если у вас есть желание ознакомиться с протоколом TFTP, то я советую скачать бесплатную программу, размещенную здесь. Добрые люди из Solarwinds были достаточно любезны, чтобы предоставить сервер TFTP на основе win32 абсолютно бесплатно. Хвала им! После ее установки пробуйте переносить файлы с помощью команд “GET” и “PUT”. Также необходимо исследовать подключение для анализа получившегося трафика. Вот и конец обзора протокола TFTP. Надеюсь, что вам понравилось. До встречи.
Дон Паркер (Don Parker)