Читаем Техника сетевых атак полностью

· #include «stdio.h»· #include «string.h»·· root()· {· printf("Hello, Root!\n");·}·· auth()· {· char user[10];· char pass[10];· printf("Login:"); gets( amp;user[0]);· printf("Passw:"); gets( amp;pass[0]);· if (!strcmp( amp;pass[0],"guest"))· return 1;· return 0;·}·· main()· {· printf("Buffer Overflows Demo\n");· if (auth())· printf("Password ok\n");· else· printf("Invalid password\n");·}

На первый взгляд, программа как будто бы должна работать нормально. Но функция gets(), читающая строку с клавиатуры, не имеет никаких представлений о размере выделенного под нее буфера, и принимает данные до тех пор, пока не встретит символ возврата каретки. Если пользователь введет в качестве своего имени строку, превышающую десять символов [307], ее «хвост» затрет адрес возврата функции и дальнейшее выполнение программы окажется невозможным.

Например, если запустить этот пример под управлением Windows 2000, и в качестве имени пользователя ввести строку “1234567890qwerty” операционная система выдаст следующее сообщение, предлагая либо завершить работу приложения, либо запустить отладчик (если он установлен) для выяснения причин сбоя: «Исключение unknown software exception (0xc000001) в приложении по адресу 0x0012ffc0».

Рисунок 72 Реакция системы на переполнение буфера

Допустим, в программе присутствует некая функция (условно названная “root”), которая выполняет действия, необходимые злоумышленнику. Может ли он специально подобранной строкой изменить адрес возврата таким образом, чтобы вместо сообщения о неправильно набранном пароле, управление передавалось на эту функцию?

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

Дизассемблирование - процесс сложный и требующий от исследователя хороших знаний ассемблера, архитектуры операционной системы и техники компиляции кода. Без этого разобраться с алгоритмом работы программы практически невозможно. К сожалению, практически не существует литературы, посвященной дизассемблированию, поэтому, в большинстве случаев приходится осваивать эту тему самостоятельно [308].

Все, сказанное ниже, рассчитано на читателя средней квалификации, как минимум знающего назначение наиболее употребляемых команд микропроцессора Intel 80x86. В качестве дизассемблера выбрана IDA PRO четвертой версии [309], однако, можно воспользоваться и другими инструментами, такими как SOURCER, W32Dasm или на худой конец DumpBin, который поставляется с любым Windows-компилятором.

Результат дизассемблирования buff.demo.exe показан ниже (на диске, прилагаемом к книге, он расположен в файле “/LOG/buff.demo.lst”). Исследователь должен изучить «устройство» функции Auth, (как ее найти во много килобайтовом листинге - тема отдельного разговора). Для облегчения понимания, листинг снабжен подробными комментариями.

·.text:00401000; Segment type: Pure code

·.text:00401000 _text segment para public 'CODE' use32

·.text:00401000 assume cs:_text

·.text:00401000;org 401000h

·.text:00401000 assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

·.text:00401000 Root proc near

·.text:00401000; Функции root расположена по адресу 0x401000

·.text:00401000 push ebp

·.text:00401000 ;… назначение процедуры root значение не имеет

·.text:00401000 ;… для ее вызова достаточно знать по какому адресу она расположена в памяти

·.text:00401000;… а расположена она по адресу 0x401000

·.text:00401001 mov ebp, esp

·.text:00401003 push offset aHelloRoot; "Hello, Root!\n"

·.text:00401008 call _printf

·.text:0040100D add esp, 4

·.text:00401010 pop ebp

·.text:00401011 retn

·.text:00401011 Root endp

·.text:00401012

·.text:00401012; --------------- S U B R O U T I N E ---------------------------------------

·.text:00401012

·.text:00401012; Attributes: bp-based frame

·.text:00401012

·.text:00401012 auth proc near; CODE XREF: main+10p

·.text:00401012

·.text:00401012 var_18 = byte ptr -18h

·.text:00401012 var_C = byte ptr -0Ch

·.text:00401012; Так IDA обозначает локальные переменные, а цифры указывают относительное

·.text:00401012; расположение от конца кадра стека.

·.text:00401012; В Момент вызова функции указатель стека указывает на адрес возврата

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных