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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






 
 
| Добавить в избранное | Сделать стартовой 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