Как заточить exploit под себя


         

В данном случае мы получим


В данном случае мы получим следующий код:

00000000: 29C9                    sub    ecx,ecx

00000002: 83E9B0           sub    ecx,-050 ;"P"

00000005: D9EE                    fldz

00000007: D97424F4         fstenv [esp][-000C]

0000000B: 5B               pop    ebx

0000000C: 81731319F50437   xor    d,[ebx][00013],03704F519 ;"7¦ov"

00000013: 83EBFC           sub    ebx,-004 ;"¦"

00000016: E2F4                    loop   00000000C   -------- (1)

Листинг 3 первые 16-байт shell-кода содержат осмысленный код расшифровщика

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

Правильно спроектированный shell-код работает на всех версиях операционных систем для которых он предназначен, однако, в последнее время все чаще и чаще приходится сталкиваться с "пионерством", привязывающимся к фиксированным адресам и функционирующих только под определенной сборкой LINUX-ядра или заранее заданным сервис-паком, наложенным на Windows. Постойте-постойте! Какой такой Windows?! Мы же ведь сидим на LINUX/BSD и никуда с этих замечательных систем сходить не собираемся! Все правильно! Но даже LINUX/BSD-хакерам частенько приходится атаковать Windows-машины и обходить этот вопрос стороной мыщъх просто не имеет моральных прав! (см. врезку)

UNIX-подобные системы в этом плане намного менее изменчивы и там проблема "фиксированных адресов" практически сведена на нет. Обычно shell-код вызывает необходимые ему функции через системные вызовы, интерфейс с которыми обеспечивается прерыванием INT 80h или дальним вызовом по адресу 0007h:00000000h, что позволяет shell-коду функционировать под всей линейкой осей, для которых он предназначен.Тем не менее, определенные системные вызовы в различных версиях ядер реализованы сильно неодинаково, что порождает проблемы совместимости. К счастью, базовый набор системных вызовов остается единым для всех осей и грамотно спроектированный exploit поражает как LINUX, так и BSD, а если не поражает, то не задумываясь отправляется в /dev/nul.


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий