Как я могу подделать пакет обнаружения DHCP, используя Bash? - PullRequest
1 голос
/ 29 мая 2020

Я хотел бы отправить по сети (LAN) пакет classi c DHCP Discover с помощью командной строки, чтобы вызвать ответ от любого DHCP-сервера прослушивания, поэтому Я мог бы записать это с помощью чего-то вроде (скажем, мой IP-адрес 192.168.0.30):

tcpdump -i eth0 host 192.168.0.30 -n -s 0 -vvv -w listening.pcap

Я думаю об этом как о простом методе обнаружения мошеннических DHCP-серверов в сети.

Как я могу сделать это , используя Bash?

Дополнительные данные :

Ответы [ 3 ]

1 голос
/ 02 июня 2020

«Хакерское» решение

Заданный вопрос поднимает три проблемы:

  1. использование Bash echo
  2. Доставка пакет UDP DHCPDISCOVER
  3. создание пакета DHCPDISCOVER

Чтобы пакет DHCPDISCOVER без искажений достиг DHCP-сервера, он должен быть отправлен в виде двоичных данных . К сожалению, Bash принимает некоторые двоичные последовательности в качестве управляющих команд. Это исключает использование echo Bash.

Команда cat не вызывает этой проблемы, пока ввод осуществляется из файла (в обход bash). Пакет поставляется следующим образом:

cat blobfile | nc -w1 -u -b 255.255.255.255 67

Пакет отправлен правильно, сервер DHCP возвращает пакет DHCP Offer. Фрагмент лога из tcpdump:

DHCP-Message Option 53, length 1: Discover

и ответ сервера:

DHCP-Message Option 53, length 1: Offer

Откуда взять детали доставки - отдельный вопрос. Я получил их путем перехвата доставки DHCPDISCOVER с помощью ncat таким образом:

ncat -l -p 67 --udp >blobfile

Наличие такого блока достаточно для отправки пакетов DHCPDISCOVER и, таким образом, решить базовую c задача .

Если быть точным, вам придется написать генератор пакетов DHCPDISCOVER, к сожалению RF C 2132 и другие имеют довольно сложную структуру и формат записи - см. Мое «полное решение».

1 голос
/ 02 июня 2020

Полное решение

Решение похоже на «хакерское» с той разницей, что пакет UDP Discover будет сгенерирован вручную в оболочке.

Код предназначен только для замены данного MA C сетевой карты на форму пробелов вместо двоеточий и присвоения переменной (введите Bash):

# manualy:
MAC=ab:ab:ab:ab:ab:ab; MAC=`printf "$(echo $MAC | sed 's/:/ /g')%.0s"`
# or automaticaly: 
MAC=`printf "$(echo $(ifconfig -a |awk -v RS= '/eth0/' |awk '/ether/ {print($2)}') | sed 's/:/ /g')%.0s"`
# or simply type (spaces instead of colons!):
MAC="a6 a6 a6 a6 a6 a6"

Используя xxd, сгенерируйте файл, содержащий пакет DHCPDISCOVER готов к отправке. Я использую тот факт, что на практике контрольная сумма не проверяется всеми DHCP серверами . Это позволяет избежать значительных сложностей с вычислением контрольной суммы и ее записью. Единственный элемент, который нужно изменить, это MA C сетевой карты.
Сайт очень помог: DHCP (на русском)

echo -e $(echo -n -e "01 01 06 00 62 48 94 CA 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 $MAC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 01 FF") |xxd -r -p >blobfile

Чтобы пакет DHCPDISCOVER без искажений достиг DHCP-сервера, он должен быть отправлен в виде двоичных данных . К сожалению, Bash принимает некоторые двоичные последовательности в качестве управляющих команд.

HEX-коды от 00 до 1F - это диапазон управляющих символов, который зависит от системы. Многие из них будут интерпретироваться как BASH, например 1F, 0d et c. К этому добавляются управляющие последовательности, например 082008 или 610860. Адреса

MA C теоретически равны 16777216, обычно они содержат части, идентифицирующие производителя и оборудование. Производителей становится все больше, в том числе компьютеров, также существует практика назначения воображаемых или генерации случайных MA C адресов. Таким образом, вероятность использования управляющих символов высока.

Это исключает использование echo Bash*. Мы будем использовать cat.

cat blobfile | nc -w1 -u -b 255.255.255.255 67

Фрагмент результата Wireshark:

Client MAC address: ab:ab:ab:ab:ab:ab (ab:ab:ab:ab:ab:ab)
Option: (53) DHCP Message Type (Discover)

Решение сводится к 2 строкам кода, используя только cat и xxd и netcat при условии ручного ввода адреса MA C в оболочке.

Я не нашел способа сделать Bash невосприимчив к двоичным данным, не нарушая их. Вот почему я предлагаю исключить его из фазы отправки пакета Возможно, имеет смысл написать генератор в C, который избавится от перенаправления в файл и программу cat и упакует все в одну строку. Однако это не является предметом вопроса.

РЕДАКТИРОВАТЬ:

Решение проблемы Bash - установить оболочку r c из Plan 9. Она очень мала. (96 КБ), быстро и, что наиболее важно, не интерпретирует двоичные символы как управляющие . Я проверил на стандартной версии r c 1.7.4-1 Debian Linux, доступной через apt. Теперь просто следуйте инструкциям ниже, чтобы отправить правильный пакет DHCP Discover без использования cat и файла-заглушки, только оболочки и xxd и n c.

MAC='08 20 08 1f 0d ff'
echo -n -e "01 01 06 00 62 48 94 CA 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 $MAC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 01 FF" |xxd -r -p | nc -w1 -u -b 255.255.255.255 67
1 голос
/ 29 мая 2020

Решение для замены - во имя удобства.

Не проще ли просканировать сеть на предмет DHCP-серверов?

# nmap -sU -p 67 --script=dhcp-discover 192.168.43.0/24 |awk -v RS= '/dhcp-discover/'

результат:

Starting Nmap 7.40 ( https://nmap.org ) at 2020-05-29 18:38 UTC
Nmap scan report for 192.168.43.1
Host is up (0.0052s latency).
PORT   STATE SERVICE
67/udp open  dhcps
| dhcp-discover: 
|   DHCP Message Type: DHCPACK
|   Server Identifier: 192.168.43.1
|   IP Address Lease Time: 47m22s
|   Subnet Mask: 255.255.255.0
|   Broadcast Address: 192.168.43.255
|   Router: 192.168.43.1
|   Domain Name Server: 192.168.43.1
|_  Vendor Specific Information: ANDROID_METERED
MAC Address: xx:xx:xx:xx:xx:xx (Chiun Mai Communication Systems)

Возможно, было бы разумнее обезопасить себя с помощью «dhcp snooping» (модель OSI уровня 2) на коммутаторе , который заключается в отказе от любого DHCP пакеты, поступающие не через доверенный интерфейс.

...