Шаг 23 - Что такое ошибка переполнения, второй шаг хакера

Одной из возможны ошибочных ситуаций является ошибка переполнения. Она в состоянии вывести из строя как Вашу программу, так и, например, сервис на сервере ответственный за безопасность. Когда она возникает ??? В тот момент когда необходимо ввести данные в Вашу программу или на сервер. Например, пароль. И если программа написана не очень корректно, то ввод большого массива может привести к ее отказу. А давайте попробуем. Вот пример:

// TestOver.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

void main()
{
	char buffer[2];
	printf("Enter password - ");
	gets(buffer);
}

Цель этого кода получить пароль. Так вот, если ввести больше чем два символа !! Смотрите:

gif/23_1.gif (4543 b)

Конечно буфер будет больше в реальной программе, скажем 20 символов или 50. Но можно программным путем послать и строку длиной 10000 символов. Вы скажете, что те кто пишут программы для интернета все это знают и предусмотрели ??? А вот и нет. Есть достаточное количество серверов, допустим почтовых, которые спокойно выходят из строя если им послать длинную строку вместо имени или пароля. Конечно outlook этого сделать Вам не даст. Но если Вы умеете программировать с помощью сокетов, то это пара пустяков. Кстати когда пароль или имя это понятно, но в любом случае есть еще места где это может сработать. Например, можно послать HTTP заголовок с очень длинными строками. Не факт, что сервер воспримет это нормально, иначе бы не было столько проблем и взломов. В любой программе есть буфер, и он может переполниться. Кстати с UNIX дело тоже не лучше, если не хуже. Там практически чистый С, и как раз с такими функциями ввода. Вобщем идея понятна, вместо обычных данных посылаются неразумно большие. Если программист этого не предусмотрел, то хана.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.02.2001