П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 180388 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 78706 раз(а).

Учебник HTML.
Просмотров 75678 раз(а).

Руководство по PHP5.
Просмотров 46694 раз(а).

Хостинг через призму DNS.
Просмотров 54158 раз(а).

Подборка текстов стандартных документов.
Просмотров 46606 раз(а).

Учебник PHP - Самоучитель
Просмотров 52790 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 53396 раз(а).

Внешние атаки...
Просмотров 43176 раз(а).

Учебник PHP.
Просмотров 38720 раз(а).

SSI в примерах.
Просмотров 28640 раз(а).






 
 
| Добавить в избранное | Сделать стартовой Project.Net.Ru | Помощь





Местоположение в памяти

Получение адреса шеллкода в памяти - вещь достаточно хитрая. Мы должны найти смещение от регистра %esp, указывающего на вершину стека, до адреса шеллкода. Чтобы иметь некоторый "запас прочности", начало буфера заполняется ассемблерной инструкцией NOP; это однобайтовая нейтральная инструкция, которая абсолютно ничего не делает. Поэтому, когда начальный адрес указывает на место перед настоящим началом шеллкода, центральный процессор переходит от NOP к NOP пока не достигнет нашего кода. Чтобы повысить свои шансы, мы поместим шеллкод в середину буфера с последующим начальным адресом, повторенным до конца, и в начале буфера поместим блок NOP. Диаграмма 1 иллюстрирует это:

Диаграмма 1: буфер, заполненый особым образом для атаки.
[буфер]


Диаграмма 2 описывает состояние стека до и после переполнения. Вся сохраненная информация (сохраненный %ebp, сохраненный %eip, аргументы, ...) должна быть заменена новым ожидаемым адресом возврата: начальным адресом части буфера, куда мы поместили шеллкод.

Диаграмма 2 : состояние стека до и после переполнения
pile_bef.gif
pile_aft.gif
До
После


Однако, есть другая проблема, относящаяся к выравниванию переменных в стеке. Адрес длиннее, чем 1 байт, и поэтому сохраняется в нескольких, а это может привести к тому, что выравнивание в стеке не всегда будет правильным. Методом проб и ошибок мы можем найти правильное выравнивание. Так как наш процессор использует четырехбайтные слова, выравнивание может быть 0, 1, 2 или 3 байта (смотри в Части 2 = статье 183 об организации стека). На диаграмме 3, серые части соответствуют записанным 4 байтам. Первый случай, где адрес возврата перезаписан точно, с правильным выравниванием, - единственный, который будет работать. Остальные приведут к ошибке segmentation violation - нарушение сегментации или illegal instruction - недопустимая инструкция. Эмпирический путь поиска хорошо работает, так как мощь современных компьютеров позволяет нам делать подобные опыты.

Диаграмма 3 : возможные выравнивания с четырехбайтным словом
[выравнивание]

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



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru