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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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






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





Даже больше

Предыдущий метод позволяет нам искать важную информацию, такую как адрес возврата функции, которая создала стек, содержащий буфер. Однако, возможно при помощи нужного формата искать данные, расположенные дальше, чем уязвимый буфер.

Вы можете обнаружить порой полезный формат в случае, когда необходимо поменять местами параметры (например, при выводе даты и времени). Мы добавляем формат m$, сразу после %, где m - целое > 0. Он задает позицию переменной в списке аргументов (начиная с 1), которую необходимо использовать:

/* explore.c */
#include <stdio.h>

  int
main(int argc, char **argv) {

  char buf[12];

  memset(buf, 0, 12);
  snprintf(buf, 12, argv[1]);

  printf("[%s] (%d)\n", buf, strlen(buf));
}

Формат, использующий m$, дает нам возможность подниматься по стеку на столько, на сколько мы хотим, так же как мы можем это делать, используя gdb :

>>./explore %1\$x
[0] (1)
>>./explore %2\$x
[0] (1)
>>./explore %3\$x
[0] (1)
>>./explore %4\$x
[bffff698] (8)
>>./explore %5\$x
[1429cb] (6)
>>./explore %6\$x
[2] (1)
>>./explore %7\$x
[bffff6c4] (8)

Символ \ необходим здесь, для защиты $, чтобы оболочка не интерпретировала его по-своему. В первые три вызова мы увидели содержимое переменной buf. С помощью %4\$x мы получили сохраненный регистр %ebp, а затем при помощи %5\$x - сохраненный регистр %eip (известный как адрес возврата). Последние 2 результата, представленные здесь, показывают значение переменной argc и адрес, содержащийся в *argv (помните, что **argv - означает, что *argv - массив адресов).

 

Коротко ...

Данный пример показывает, что предоставленный формат позволяет нам идти вверх по стеку в поисках информации, такой как возвращаемое значение функции, адрес... Однако, мы видели в начале этой статьи, что мы можем производить запись при помощи функций, типа printf(): разве это не выглядит как прекрасная потенциальная уязвимость?

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



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





Copyright © 2005-2016 Project.Net.Ru