Показать сообщение отдельно

  #8  
Старый 11.09.2007, 08:16
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
С нами: 10721066

Репутация: 4360


По умолчанию

Цитата:
если же такого аргумента не будет, интерпретатор начнет перебирать память до первого указателя, после чего начинает читать содержимое памяти по этому адресу, пока не дойдет до нуля или не попадет на память к которой у него нету доступа, в этом случае windows сгенерирует исключение.
Ой бред какойто. Аргумент извлекается в любом случае и НЕ БЫТЬ его там не может - это стек, там всегда есть данные (ну почти.. границу стека в данном случае не рассматриванием). Просто я к тому, что ничего перебирать он не будет - это бред.
А уж будет ли извлеченный дворд указателем - проблемы программиста
Цитата:
Откомпилируйте пример и введите заместо верного ответа спецификатор %s, обратите внимание на результат. Продолжим рассматривать спецификаторы, спецификатор %x выводит парное двойное слово из стека в шестнадцатиричном формате, это может пригодиться, если вам нужно получить адреса определенных данных. Также нужно сказать про спецификатор %n, цель которого записать в парный указатель количество выведенных байтов на данный момент. Перезаписываться будет не сам указатель, а область памяти, на которую он указывает. Это открывает огромные возможности нападающему.
Приведенный пример неуязвим же на этот тип атаки. Буфер не передается как форматная строка в данном случае. Стоит переписать так:
Код:
#include <stdio.h>

int main(int argc, char *argv[])
{
 char buff[16];
 printf("What is your name? ");
 gets(buff);
 printf("Hello, ");
 printf(buff);
 return 0;
}
Тогда действительно будут проблемы при вводе форматных символов.
Я видел книжку с отличным описанием данного типа атак. К сожалению, не помню ни названия, ни автора - читал у Cr4sh'а дома когда бухали по пьяни))
Чтото про эксплоиты

Последний раз редактировалось _Great_; 11.09.2007 в 08:19..
 
Ответить с цитированием