Разработка эксплоитов веб приложений

Эксплоиты веб-приложений
Dante

 

В этом разделе Metasploit разговор будет идти о разработке веб приложений эксплоитов в Metasploit Framework. Веб приложение, которое мы будем использовать, называется dotDefender и в дальнейших статьях в этом разделе мы будем рассматривать разработку эксплоитов веб-приложений. Код который мы будем использовать в качестве основы для нашего эксплоита можно обнаружить на веб-сайте Exploit-DB: http://www.exploit-db.com/exploits/14310/

Целочисленные переменные

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

 

Например переменная xколичество патронов в вашем автомате. Изначально к примеру ‘x’=30 вы стреляете из автомата и становится количество патронов на один меньше, и собственно переменная становится на один меньше. К примеру xбыл равен 30, потом 29 и так далее затем патроны оканчиваются и xстановится равен 0, после перезарядки вашего магазина автомата, вы получаете опять 30.

 

Давайте рассмотрим восемь типов переменных. Их можно поделить на два подтипа, те которые только положительны и те которые симметричны относительно нуля.

 

Тип

Размер в битах

Диапазон

byte

8

0 : 255

sbyte

8

128 :127

short

16

32768 : 32767

ushort

16

0 : 65535

int

32

2147483648 : 2147483647

uint

32

0 : 4294967295

long

64

-9223372036854775808 : 9223372036854775807

ulong

64

0 : 18446744073709551615

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

Портирование эксплоитов

Портирование эксплоита в Metasploit Framework

 

Хоть Metasploit является коммерческой собственностью, он по-прежнему является открытым и процветает на основе внесенных пользователем модулей. У команды разработчиков существует прекрасная возможность портировать существующие публичные эксплоиты в Metasploit Framework. Портирование эксплоитов не только поможет сделать Metasploit более универсальным и мощным, это также отличный способ, для того чтобы узнать о внутренней работе Framework и поможет вам, в это же время, улучшить свои навыки на Ruby. Один очень важный момент, что необходимо помнить при написании Metasploit модулей, что необходимо вас всегда использовать жесткие вкладки, а не пробелы. За некоторыми иными важными деталями модуля, обратитесь к файлу HACKING находящуюся в корне каталога Metasploit. Существует некоторая важная информация, которая поможет убедиться, что ваши представления быстро добавят к стволу.

 

Для начала, нам необходимо выбрать порт эксплоита снова. Мы будем использовать конвертер эксплоита A-PDF WAV в MP3. При портировании эксплоитов, нет необходимости, начинать кодирование с нуля; мы можем просто выбрать уже существующий эксплоит модуль и модифицировать его в соответствии с нашими целями. Поскольку это формат файлов эксплоита, мы будем смотреть под modules/exploits/windows/fileformat/ от главного Metasploit каталога для подходящего кандидата. Этот эксплоит перезаписывает SEH таким образом, мы должны обнаружить эксплоит модуль, который использует mixin Msf::Exploit::Remote::Seh. Мы можем найти в верхней части эксплоита audiotran_pls.rb как это видно ниже.

Перезаписывание эксплоитом SEH
Dante

  Читать далее Портирование эксплоитов

Завершение Эксплоита

Завершение нашего эксплоита egghunter

 

Это переполнение стандарта SEH. Мы можем заметить кое-что из нашего пользовательского ввода в ‘pop, pop, ret‘ вдали от нашего stack. Интересной вещью что можно заметить из скриншота, является тот факт, что мы отправили 2000 байт payload — однако кажется что когда мы возвратимся к нашему буферу, он получается усеченным. У нас есть около 80 байт пространства для нашего shell кода (синим выделено). Мы используем невосприимчивость! Функция safeseh определит местоположение незащищенных библиотек, из которых может быть найден обратный адрес.

Исключение обработчика переполнения SEH
Dante

 

Мы копируем DLL и ищем POP POP RET комбинации команд при помощи msfpescan.

Используем msfpescan
Dante

 

Из доказательства концепции эксплоита

 

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

Используем pattern create
Dante

 

Мы модифицируем наш эксплоит путем введения действенного обратно адреса.

Ввод обратного адреса
Dante

 

Затем мы настроим буфер для перенаправления потока исполнения на момент краха нашего обратного адреса, перепрыгнув через него (xEB является коротким прыжком ‘short jump‘) и затем останавливаем точку остановки буфера (xCC).

Настраиваем буфер
Dante

 

Еще раз мы создаем наш файл эксплоита, приложим Audacity отладчику и импортируем вредоносный файл. На этот раз, SEH должны быть перезаписаны с нашего адреса — тот который приведет нас к набору команд pop, pop, ret. Там мы устанавливаем точку остановки, и еще раз возьмем исключение с shift + F9 и пройдем сквозь наш pop pop ret с F8.

SEH сети
Dante

 

Короткий прыжок перебросит нас через наш обратный адрес, в нашем ‘shellcode buffer‘.

Shell код эксплоита Egg Hunter
Dante

 

Снова мы имеем очень мало места в буфере для нашего payload. Быстрый осмотр памяти показывает что длина нашего полного буфера может быть найдена в динамической памяти. Зная это мы может использовать наше первоначальное пространство 80 байт в выполнении egghunter, который будет искать и найдет второй payload.

Egg-hunt эксплоит
Dante

 

Реализация Metasploit Framework egghunter достаточно проста:

Код Metasploit Framework egghunter
Dante

 

Окончательно эксплоит выглядит так:

Окончательный эксплоит
Dante

 

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

Производим запуск egghunter
Dante

 

Мы генерируем наш окончательный взрывной эксплоит:

Производим генерацию эксплоита
Dante

 

И получим meterpreter shell.

 

Получаем Shell Meterpreter
Dante

Использование Egghunter Mixin

Отправление Egg-hunt

 

Metasploit Framework egghunter mixin является замечательным модулем который может быть чрезвычайно полезным в разработке эксплоитов. Для тех кто не знаком с понятием egghunters давайте объясню. Как смогу.

 

Egg-hunt

 

Это является еще одной формой staged shell кода, который используется если злоумышленник может ввести больший shell код в процесс, но не может определить где в процессе будет конец. Малый egg-hunt shell код вводится в процесс предсказанного расположения и выполняется. Этот код ищет пространство адресного процесса для большого shell кода(egg) и выполняет его.

 

Уязвимость в редакторе аудио Audacity представляет нам возможность изучить этот mixin в большей глубине. В следующем модуле, мы будем использовать Audacity и создадим Metasploit формат файла эксплоит модуля для него. Мы не будем фокусироваться на самом методе эксплуатации или начале теории, а окунемся прямо в практическое использование в Egghunter mixin.

Читать далее Использование Egghunter Mixin

Переменные общее понимание

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

 

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

  Читать далее Переменные общее понимание

Получение Shell

Написание эксплоит модуля

 

С тем что мы узнали, мы пишем эксплоит и сохраняем его на ‘windows/imap/surgemail_list.rb‘. Давайте взглянем на наш новый эксплоит модуль ниже:

Наш модуль эксплоит
Dante

 

Наиболее важные вещи, которые мы можем заметить в предыдущем эксплоит коде следующие:

 

Мы определили максимальное пространство для shell кода (Space => 10351) и имеется установка DisableNops, чтобы отключить автоматическое заполнение shell кода, мы сделаем площадку payload нашей собственной.

 

Мы ставим кодировщик по умолчанию в AlphanumMixed по причине особенностей протокола IMAP.

  Читать далее Получение Shell