"Голландская атака"
Пpинцип oчeнь пpocтoй - дo нeкoтopoгo вpeмeни я xpaнил eгo в ceкpeтe,
нo вoт 13 ceнтябpя кaкaя-тo гpуппa из Гoллaндии пoчти дocлoвнo oпиcaлa
aлгopитм и пoтoму вoт вaм - пpoгpaммa.
Ocнoвнoй пpинцип oчeнь пpocтoй. Ocнoвaн oн нa тoм, чтo инфopмaция в Novell
NetWare пepeдaeтcя пocpeдcтвoм пpoтoкoлa IPX. Пpи этoм aдpeca oтпpaвитeлeй и
пoлучaтeлeй coдepжaтcя в зaгoлoвкe пaкeтa IPX. Koнкpeтнaя aппapaтуpa oбычнo
eщe caмa нaклeивaeт cвepxу нa пaкeт "кoнвepт" c aдpecoм
oтпpaвитeля/пoлучaтeля. Oднaкo этo никтo нe oтcлeживaeт. Taк чтo любoй
пoльзoвaтeль в ceти мoжeт пocлaть пaкeт кaк-бы oт имeни дpугoй paбoчeй
cтaнции, в тoм чиcлe и cтaнции cупepвизopa.
Ocнoвнaя пpoблeмa зaключaeтcя в тoм, чтo пaкeты oбмeнa workstation/server
нумepуютcя цифepкoй в диaпaзoнe oт 0 дo 255. Этo oбxoдитcя пocылкoй 256
пaкeтoв c пocлeдoвaтeльными нoмepaми. Хoть oдин, дa coвпaдeт :-)
Пpи этoм нapушaeтcя cвязь paбoчeй cтaнции, oт имeни кoтopoй вы
пocылaeтe пaкeт, c cepвepoм, тaк кaк пocлe пpиeмa вaшeгo "лeвoгo"
пaкeтa (кoтopый cepвep тeм нe мeнee вocпpинимaeт кaк нopмaльный)
пpoиcxoдит paccoглacoвaниe нoмepoв пaкeтoв в пpeдcтaвлeнии cepвepa
и в пpeдcтaвлeнии paбoчeй cтaнции. Этa пpoблeмa в пpинципe peшaeтcя
пocылкoй eщe 255*256 пaкeтoв, пpи этoм cчeтчик пpивoдитcя в пpиличнoe
cocтoяниe. Oднaкo этo дoлгo и чecтнo cкaзaть мнe этo былo лeнивo дeлaть.
Moдули, peклaмиpуeмыe в USENET (SECUREFIX.NLM и SHOWEVENT.NLM) oтcлeживaют
имeннo пocылку пaчки пaкeтoв c пocлeдoвaтeльными нoмepaми. B пpинципe
мoжнo cpaзу угaдaть нoмep пaкeтa cтaнции, oт имeни кoтopoй пocылaeтcя пaкeт,
нo кaк этo дeлaeтcя paccкaзывaть нe буду - a тo зaглушу вecь вaш
иccлeдoвaтeльcкий дуx :-)
[...]
Это мы тут побаловались с сеткой ;) и паpню не влом было
собpанную инфу набить...
=== Cut ===
Здесь не рассматриваются проблемы получения эквивалента
SUPERVISOR'а (есть и другие источники, и вообще - слишком
общие принципы). Здесь показана лишь основная идея (достато-
чно подробно для понимания ). Я раскрываю данную технологию
лишь потому,что она для меня устарела - я перешел на NetWare
4.1 . Буду благодарен за любую информацию о последней.
____________________________________________________________
Hемного теории.
____________________________________________________________
Файл-сервер Novell NetWare 3.1x всю информацию о ресур-
сах сети хранит в базе данных ,называемой Bindery. Последняя
физически расположена в каталоге SYS:SYSTEM в файлах net$obj.
sys,net$prop.sys,net$val.sys. ормально,она недоступна-чтобы
получить доступ к этим файлам необходимо закрыть Bindery.Это
можно сделать вызовом функции CloseBindery: либо в C- исполь-
зуя NetWare C Interface ,либо в Assembler'e -используя следу-
ющий кусок:
;...
RequestPacket dw 1
db 44h
ReplayPacket dw 0
;...
mov ah,0E3h
int21h
cmp al,0
jnz Error ;not enough rights or somthing else...
;...
Для того,чтобы открыть Bindery (поскольку при ее закры-
тии становяться недоступны некоторые функции сети-(ex. ,вход
в сеть) необходимо вызовать функцию OpenBindery в NetWare C
Interface,либо используя следующий кусок:
;...
RequestPacket dw 1
db 45h
ReplayPacket dw 0
;...
mov ah,0E3h
int21h
cmp al,0
jnz Error ;not enough rights or somthing else...
;...
а файлах net$obj.sys,net$prop.sys,net$val.sys обычно
стоят атрибуты T,DI,RI- для модификации файлов надо их сбро-
сить, например так:
flag net$*.sys n
Рассмотрим теперь внутреннюю структуру Bindery.
Файл net$obj.sys содержит записи об объектах [64 bytes] в
формате:
XX XX XX XX Object Index(aka object ID)
XX XX Object Type
XX Length of Object Name
XX ...XX [47 bytes] Object Name
XX Flag
XX Security Access Level
XX XX XX XX 1st Property Index
XX XX XX XX
Файл net$prop.sys содержит записи о свойствах объектов
[34 bytes] в формате:
XX XX XX XX Property Index
XX Length of Property Name
XX ...XX [15 bytes] Property Name
XX Flag
XX Security Access Level
XX XX XX XX Owner Object of Property
XX XX XX XX Next Property Index for Object
XX XX XX XX 1st Value Index
Файл net$obj.sys содержит записи о значении свойств
[142 bytes] в формате:
XX XX XX XX Value Index
XX XX XX XX Owner Property of Value
XX XX XX XX Next Value Index for Property
XX Number of segments
XX ...XX[128 bytes] Value
Все значения- в формате low-high.
Смещение в файле для записи с индексом index можно найти
как: offset=(index & 0xFFFFFF)*size_of_record
Значения Object Type могут быть следующими:
WILD (-1) Matches any type
UNKNOWN 0x0000 Unknown object type
USER 0x0001 The object is a "user"
USER_GROUP 0x0002 A group of users
GROUP 0x0002
PRINT_QUEUE 0x0003 Services print queues
FILE_SERVER 0x0004 The object serves files
JOB_SERVER 0x0005
GATEWAY 0x0006
PRINT_SERVER 0x0007
ARCHIVE_QUEUE 0x0008
ARCHIVE_SERVER 0x0009 Services backup jobs
JOB_QUEUE 0x000A
ADMINISTRATION 0x000B
NAS_SNA_GATEWAY 0x0021
REMOTE_BRIDGE_SERVER 0x0024
TCPIP_GATEWAY 0x0027
TIME_SYNCHRONIZATION_SERVER 0x002D
ARCHIVE_SERVER_DYNAMIC_SAP 0x002E
ADVERTISING_PRINT_SERVER 0x0047
BTRIEVE_VAP 0x004B
NW$SQL_VAP 0x004C
PRINT_QUEUE_USER 0x0053
Значения Flag означают следующее:
bit 0=0 - STATIC [object/property статические]
=1 - DYNAMIC [object/property динамические,удаляются
при останове сервера]
bit 1=0 - ITEM [property обычное]
=1 - SET [property - множество]
Значения Security Access Level означают следующее:
младшая тетрада[bits 3...0] -READ- права на чтение
старшая тетрада[bits 7...4] -WRITE- права на запись
права могут быть следующие:
Any 0x0000 by anyone
Logged 0x0001 Must be logged in
Object 0x0002 by same object or super
Supervisor 0x0003 by supervisor only
Bindery 0x0004 only by the bindery [NetWare]
Приведем некоторые свойства:
для Object = Server [00 04]
SAL Flag
OBJ_BACK_LINKS ѓ 44 ѓ 02 ѓ
NET_ADDRESS ѓ 40 ѓ 01 ѓ
OPERATORS ѓ 31 ѓ 02 ѓ
BLOCKS_READ ѓ 31 ѓ 00 ѓ
BLOCKS_WRITE ѓ 31 ѓ 00 ѓ
CONNECT_TIME ѓ 31 ѓ 00 ѓ
ACCOUNT_ADDRESS ѓ 31 ѓ 02 ѓ
для Object = Group [00 04]
SAL Flag
OBJ_BACK_LINKS ѓ 44 ѓ 02 ѓ
GROUP_MEMBERS ѓ 31 ѓ 02 ѓ
IDENTIFICATION ѓ 31 ѓ 00 ѓ
OBJ_SUPERVISORS ѓ 32 ѓ 02 ѓ
для Object = Server [00 04]
SAL Flag
OBJ_BACK_LINKS ѓ 44 ѓ 02 ѓ
USER_DEFAULTS ѓ 31 ѓ 00 ѓ
PASSWORD ѓ 44 ѓ 00 ѓ
GROUPS_I'M_IN ѓ 31 ѓ 02 ѓ
LOGIN_CONTROL ѓ 32 ѓ 00 ѓ
ACCOUNT_BALANCE ѓ 32 ѓ 00 ѓ
MISC_LOGIN_INFO ѓ 22 ѓ 00 ѓ
HOMEDIRPATH ѓ 31 ѓ 00 ѓ
SEQURITY_EQUALS ѓ 32 ѓ 02 ѓ
OLD_PASSWORDS ѓ 33 ѓ 00 ѓ
IDENTIFICATION ѓ 31 ѓ 00 ѓ
OBJ_SUPERVISORS ѓ 32 ѓ 02 ѓ
_____________________________________________________________
Теперь - к делу.
Как было указано выше,будем исходить из того что вы уже имеете
эквивалент SUPERVISOR'а.Однако этого мало.Вообще-то желательно
чтобы вас еще и не видели.
Суть моего метода проста:надо всего лишь установить у ваше-
го обьекта Security Access Level=44 . Тогда вас будет видеть
лишь система(с доступом=4),но не user'ы (с доступом=2) и не
SUPERVISOR'ы (с доступом=3).
Однако невидимость неполная.Вас можно увидеть из следующих
стандартных утилит: userlist.exe, fconsole.exe, monitor.nlm.
Что касается первой ,ее можно попросту переписать.Особенно
неприятен monitor.nlm:он не только видит ваш адрес(как,впрочем,
и все эти 3 утилиты,что легко обойти (подумайте-как?)),но и ва-
ши открытые файлы- так что работайте аккуратно!
о есть очень простой (как все гениальное ;) способ замас-
кироваться-надо всего лишь назвать свой объект NOT-LOGGED-IN !
Тогда вы будете каэаться неподключенными.
Увы,есть еще одна утилита,могущая доставить вам неприятно-
сти - BINDFIX :{ Она призвана исправлять ошибки в Bindery - и
вы ,конечно же, будете этой ошибкой.Она исправит и Security Ac-
cess Level свойства PASSWORD (скажем ,объекта SUPERVISOR) ,если
вы захотите установить его =00 -просто так! почитать/поисправ-
лять на досуге... :->
Что делать? Удалите ее или исправьте(что круче но напряжнее).
евидимость имеет и плохие стороны:
1) нельзя юзать MAP.EXE ,роме как в Login Script'е.
2) в SYSCON.EXE при входе вас грязно обругают (что терпимо) и
не дадут редактировать группы, хотя разрешат делать _ЭТО_
с объектами-пользователямм _О_ не с вами (вы-то и себя не
видите!)
Чем бы еще поделиться?
1) большие невидимые люди не имет свого каталога в MAIL для
Login Script'а - напишите файлик типа:
;myscript
map z:=vol:
map f:=sys:
drive z:
и входите так:
login.exe not-logged-in /s myscript
2) все ваши действия,которые системе кажутся опасными(надеюсь,
они у вас все опасны) (ex. Open/Close Bindery) она выводит
на System Console и в файл SYS:\SYSTEM\sys$log.err - очищай-
те первую( комманды CLS и OFF) и редактируйте второй.
3) если на сервере включен Accounting server то вход/выход в/из
сеть/сети регистрируется в SYS:\SYSTEM\net$acct.dat (по умол-
чанию есть флаг T).Исправляйте!
4) самое интересное - property PASSWORD.Его формат:
XX ... XX [16 bytes- hashing password] LL ,
где LL - длина пароля( _почти_(!!!) всегда).
Еще более интересное - после анализа алгоритма шифрования па-
роля я пришел к выводу (все выкладки проверены) что его можно
расшифровать за _ПОЛИHОМИАЛЬHОЕ_ время !
"Представляет интерес вот ишо такой разрез"- кто-нибудь думал
о разных паролях с одинаковым результатом шифрования?