Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Универсальный пакетный инжектор и сниффер 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

Одним словом, почему вы должны рассматривать 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 как инжектор

Давайте немножко займемся магией

С помощью 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. На самом деле, этот пример может быть улучшен, он просто демонстрирует универсальность инструментов.

Пакетный инжектор: Свойства HexInject

Можно даже эмулировать 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 может прочесть необработанный беспроводной трафик на интерфейсе монитора.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


Необработанный сетевой доступ

Прежде всего, интерфейс должен быть переведен в режим отслеживания:

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

Универсальный пакетный инжектор и сниффер: HexInject

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

Это интересно:


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices