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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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




Переполнения буфера

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

Например, в следующей программе мы копируем строку из первого аргумента в командной строке в 500-байтный буфер. Это копирование производится без проверки хватит ли места в буфере. Как мы увидим позднее, использование функции strncpy() позволяет нам избежать данной проблемы.

  /* vulnerable.c */

  #include <string.h>

  int main(int argc, char * argv [])
  {
    char buffer [500];

    if (argc > 1)
    strcpy(buffer, argv[1]);
    return (0);
  }

buffer - автоматическая переменная, место из 500 байт резервируется в стеке, как только мы входим в функцию main(). При запуске уязвимой программы с аргументом длиннее 500 символов, данные переполняют буфер и "вторгаются" в стек процесса. Как мы видели ранее, в стеке содержится адрес следующей инструкции для выполнения (адрес возврата). Чтобы воспользоваться этой дырой в безопасности, достаточно заменить адрес возврата функции адресом шеллкода, который мы хотим запустить. Этот шеллкод вставляется в тело буфера с последующим его адресом в памяти.

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



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





Copyright © 2005-2016 Project.Net.Ru