П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

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

MySQL

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

Хостинг

Другое







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

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

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

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

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

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

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

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

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

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

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

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






 
 



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

В нашей предыдущей статье мы написали маленькую программу около 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-2011 Project.Net.Ru


рекламные стойки