Универсальный пакетный инжектор и сниффер HexInject
HexInject версия 1.6 была выпущена (04 января 2016)
Скачать HexInject
В этом выпуске было переписано много непереносимых частей кода для того, чтобы улучшить переносимость и больше соответствовать стандартам. Этот выпуск также расширяет количество протоколов, поддерживаемых механизмом автоматического подсчета сумм и определения размеров.
В частности, был добавлен протокол IPv6, даже если он инкапсулирован в пакет IPv4 (и наоборот). Здесь приведены протоколы, которые поддерживаются механизмом автоматического подсчета сумм на данный момент:
- ipv4
- ipv6
- tcp
- udp
- icmp
- icmp6
- igmp
- ipv6 инкапсулированный в ipv4
- ipv4 инкапсулированный в ipv6
Пакетный инжектор: Свойства HexInject
- Введение шестнадцатеричных и сырых данных в сеть
- Поиск данных в шестнадцатеричном или необработаном формате в сети
- Данные могут быть легко переданы, и ими можно с легкостью управлять
- Необработанный сетевой доступ cmdline framework
- Автоматически устанавливает верную контрольную сумму (IP, TCP, UDP, ICMP)
- Автоматически устанавливает верную длину пакета (IP, TCP, UDP, ICMP)
Вступление
HexInject является очень универсальным пакетным инжектором и сниффером, который предоставляет собой фреймворк командной строки для необработанного сетевого доступа.
Он был разработан, чтобы работать вместе с другими утилитами командной строки, и по этой причине он облегчает создание мощных скриптов оболочки, которые способны считывать, перехватывать и модифицировать сетевой трафик прозрачным способом.
Одним словом, почему вы должны рассматривать hexinject ? Потому что он способен ввести что угодно в сеть, и для протоколов TCP/IP он автоматически подсчитывает контрольную сумму и размер пакета.
Есть несколько инструментов, которые предоставляют подобного рода функциональность, и лишь немногие из них могут быть объединены с утилитами командной строки. Опробуйте его!
HexInject как сниффер
Hexinject может быть использован в качестве сниффера, когда задана опция «-s». Он может отобразить сетевой трафик, как в шестнадцатеричном, так и в необработанном формате.
Пример:
root@backtrack-base# hexinject -s -i eth0 1C AF F7 6B 0E 4D AA 00 04 00 0A 04 08 00 45 00 00 3C 9A 88 40 00 40 06 51 04 C0 A8 01 09 5B 05 32 79 C9 45 01 BB 61 5E 85 79 00 00 00 00 A0 02 16 D0 0D 2F 00 00 02 04 05 B4 04 02 08 0A 00 0D 22 EC 00 00 00 00 01 03 03 07 FF FF FF FF FF FF AA 00 04 00 0A 04 08 06 00 01 08 00 06 04 00 01 AA 00 04 00 0A 04 C0 A8 01 09 00 00 00 00 00 00 C0 A8 01 04 AB 00 00 03 00 00 AA 00 04 00 0A 04 60 03 22 00 0D 02 00 00 AA 00 04 00 0A 04 03 DA 05 00 00 00 00 00 00 00 00 00 AA 00 04 00 00 00 0A 00 00 02 AA AA FF FF FF FF FF FF AA 00 04 00 0A 04 08 06 00 01 08 00 06 04 00 01 AA 00 04 00 0A 04 C0 A8 01 09 00 00 00 00 00 00 C0 A8 01 04
Но как насчет того, чтобы читать в режиме реального времени, что проходит в сети? Например, мы можем печатать в читаемом формате некоторые HTTP-заголовки:
root@backtrack-base# hexinject -s -i eth0 -r | strings | grep 'Host:' Host: youtube.com Host: www.youtube.com Host: s.ytimg.com ...
В этом случае должен быть использован режим «raw dump». Вместе с «strings» мы извлекаем весь читабельный текст в сети, и затем мы можем использовать «grep», чтобы с легкость получить что нам нужно …
HexInject как инжектор
Hexinject может быть использован как инжектор, когда задана опция «-p «. Он может вводить сетевой трафик, как в шестнадцатеричном, так и в необработанном формате.
Пример:
root@backtrack-base# echo "01 02 03 04" | hexinject -p -i eth0
выдаст следующий результат в wireshark:
Давайте немножко займемся магией
С помощью hexinject мы с легкостью можем модифицировать сетевые пакеты. Например, мы можем преобразовать ARP запрос в ARP ответ с помощью изменения всего лишь одного бита пакета:
root@backtrack-base# hexinject -s -i eth0 -c 1 -f 'arp' | replace '06 04 00 01' '06 04 00 02' | hexinject -p -i eth0
Wireshark дамп:
Мы передали всего два hexinject (один сниффер, второй инжектор) и утилиту командной строки «replace «. В этом примере опция «-f » используется, чтобы предоставить пользовательский pcap фильтр.
Ниже приведен последний пример, чтобы подвести итог презентации данного инструмента. Простой прозрачный мост, построенный с использованием только двух строк bash:
root@backtrack-base# hexinject -s -i eth0 -c 1 -f 'src host 192.168.1.9' | hexinject -p -i eth1 root@backtrack-base# hexinject -s -i eth1 -c 1 -f 'dst host 192.168.1.9' | hexinject -p -i eth0
И, вуаля! Прозрачный мост для хоста 192.168.1.9. На самом деле, этот пример может быть улучшен, он просто демонстрирует универсальность инструментов.
Можно даже эмулировать NAT, своевременно заменяя IP:
root@backtrack-base# hexinject -s -i eth0 -c 1 -f 'src host 192.168.1.9' | replace 'C0 A8 01 09' 'C0 A8 01 04' | hexinject -p -i eth1 root@backtrack-base# hexinject -s -i eth1 -c 1 -f 'dst host 192.168.1.9' | replace 'C0 A8 01 04' 'C0 A8 01 09' | hexinject -p -i eth0
Примечание: этим двум примерам не хватает управления MAC адресами, это может быть реализовано с помощью помещения скрипта в середину программного канала. Тем не менее, эти примеры дают понимание того, что может быть сделано.
Необработанный сетевой доступ
Вы все еще думаете, что получения доступа к необработанному беспроводному трафику требует странных и сложных библиотек и это сложно реализовать? Это абсолютно не является правдой: с помощью hexinject даже простой скрипт bash может прочесть необработанный беспроводной трафик на интерфейсе монитора.
Прежде всего, интерфейс должен быть переведен в режим отслеживания:
root@backtrack-base# airmon-ng start wlan1 Interface Chipset Driver wlan1 RTL8187 rtl8187 - [phy0] (monitor mode enabled on mon0)
Затем можно перехватить, например, фрейм маяка, сгенерированный точкой доступа:
root@backtrack-base# hexinject -s -i mon0 00 00 0D 00 04 80 02 00 02 00 00 00 00 80 00 00 00 FF FF FF FF FF FF AA BB CC DD EE FF AA BB CC DD EE FF 70 01 42 BB 6B EB AC A6 04 00 64 00 01 04 00 07 44 45 46 41 55 4C 54 01 04 02 04 0B 16 32 08 0C 12 18 24 30 48 60 6C 03 01 01 00 00 0C 00 04 80 00 00 02 00 18 00 80 00 00 00 FF FF FF FF FF FF AA BB CC DD EE FF AA BB CC DD EE FF 80 01 CD 46 6D EB AC A6 04 00 64 00 01 04 00 00 01 04 02 04 0B 16 32 08 0C 12 18 24 30 48 60 6C 03 01 01
Точка доступа имеет ESSID «DEFAULT» (По умолчанию).
Для извлечения этой информации мы можем использовать свойство, представленное в hexinject v1.3 — conversion modes (режимы конвертации). Эти оперативные режимы просто конвертируют шестнадцатеричную строку в необработанную и наоборот. Давайте предположим, что мы сохранили последний пакет в файле wifi_frame.hex (ESSID будет четко выведен на экран с некоторыми ненужными данными…):
root@backtrack-base# cat wifi_frame.hex | hexinject -y | strings DEFAULT $0H`l
Возможности поиска являются неограниченными, что самое интересное, так это ввод необработанных беспроводных фреймов. Для вставки фрейма нам нужна минимальная допустимая преамбула (в противном случае интерфейс не будет ничего вводить):
root@backtrack-base# cat minimal_beacon.hex 00 00 0D 00 04 80 02 00 02 00 00 00 00 80 00 00 00
Чтобы избегнуть сложностей, мы готовим необработанное сообщение ascii для введения и преобразования его в шестнадцатеричную строку (добавив 00 в конце для завершения строки):
root@backtrack-base# echo 'Hello, world!' | hexinject -x 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 21 0A 00
Теперь мы можем вводить все, что захотим:
root@backtrack-base# cat assembled_packet.hex | hexinject -p -i mon0
Если другая машина хочет прочитать сообщение:
root@backtrack-base# hexinject -s -r -i mon1 | strings Hello, world!
Это очень легко написать, даже в bash , простой инструмент обмена сообщений, который использует необработанные беспроводные фреймы (даже если такой инструмент звучит очень странно). Или вы можете использовать hexinject, как беспроводной fuzzer для поиска уязвимостей в беспроводных устройствах операционной системы. Это очень просто: не стоит колебаться, чтобы попробовать
Другие возможности: USB
Так как pcap библиотеки могут перехватывать USB трафик, hexinject способен просканировать ваши USB порты. Вы можете перехватить необработанные USB пакеты, таким же образом вы используете hexinject на своих сетевых интерфейсах:
root@backtrack-base# hexinject -s -i usbmon3 80 3A DF 2A 01 88 FF FF 43 01 81 02 03 00 2D 00 8D 43 E7 4D 00 00 00 00 AA 38 00 00 00 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00 01 00 00 00 00 00 80 3A DF 2A 01 88 FF FF 53 01 81 02 03 00 2D 3C 8D 43 E7 4D 00 00 00 00 BD 38 00 00 8D FF FF FF 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 04 02 00 00 00 00 00 00
root@backtrack-base# sudo hexinject -s -i usbmon3 | awk -f mouse_click.awk left click click released central click click released left+right click click released
Разбор пакетов и забавная печать
Начиная с версии 1.4, hexinject может разбирать пакеты и выводить на экран поля перехваченных пакетов, а начиная с версии 1.5, существует инструмент prettypacket, который фактически проводит разбор пакетов и выводит их на экран.
Это свойство очень легко в использовании, и позволяет детально проверить каждую часть поддерживаемого протокола:
Ethernet Header: AA 00 04 00 0A 04 Destination hardware address 1C AF F7 6B 0E 4D Source hardware address 08 00 Type IP Header: 45 Version / Header length 00 ToS / DFS 00 3E Total length 00 00 ID 40 00 Flags / Fragment offset 35 TTL 11 Protocol D6 DD Checksum D0 43 DC DC Source address C0 A8 01 09 Destination address UDP Header: 00 35 Source port EA 94 Destination port 00 2A Length 38 01 Checksum Payload: 5D 5B 81 80 00 01 00 00 00 00 00 00 03 77 77 77 01 6C 06 67 6F 6F 67 6C 65 03 63 6F 6D 00 00 0F 00 01 ----------- Ethernet Header: 1C AF F7 6B 0E 4D Destination hardware address AA 00 04 00 0A 04 Source hardware address 08 00 Type IP Header: 45 Version / Header length 00 ToS / DFS 00 54 Total length 00 00 ID 40 00 Flags / Fragment offset 40 TTL 01 Protocol 54 4E Checksum C0 A8 01 09 Source address C0 A8 64 01 Destination address ICMP Header: 08 Type 00 Code 4C 66 Checksum 3A 48 ID 00 01 Sequence number Payload: 0D 1F DE 4E 00 00 00 00 B8 0F 0F 00 00 00 00 00 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 ----------- ...
С помощью опции -x, prettypacket может вывести на экран отдельный разобранный пакет указанного протокола, и прочитать его из своего набора примеров пакетов. Я использую эту функцию для получения быстрой ссылки на различные заголовки протоколов.
Так что, если вам нужно знать размер поля TCP Sequence Number, вам больше не нужно захватывать пакет или искать диаграмму в Интернете, просто используйте:
root@backtrack-base#prettypacket -x tcp
На данный момент поддерживаются следующие протоколы: tcp, udp, icmp, igmp, arp, stp (и, конечно же, протоколы более низких слоев: ethernet, ip).
Добавлять новые протоколы очень легко: вы можете добавить вашу функцию разбора в файл prettypacket.c, используя предоставленный простой интерфейс.
Перевод: Анна Давыдова
Источник: n0where.net
Это интересно: