Чтение онлайн

на главную

Жанры

Техника сетевых атак
Шрифт:

·.text:004010B0 loc_0_4010B0:; CODE XREF: main+97j

·.text:004010B0 push offset aPasswordOk; "Password ok\n"

·.text:004010B0; Заталкивание в стек указателя на строку “Password ok”

·.text:004010B5 lea edx, [ebp+var_34]

·.text:004010B5 ; Занесение в регистр EDX указателя на начало буфера var_34 (buff)

·.text:004010B8 push edx

·.text:004010B8 ; Заталкивание его в стек

·.text:004010B9 call _sprintf

·.text:004010B9 ; Вызов spritnf( amp;buff[0],”Password ok\n”);

·.text:004010BE add esp, 8

·.text:004010BE ; Балансировка стека

·.text:004010C1

·.text:004010C1 loc_0_4010C1:; CODE XREF: main+AEj

·.text:004010C1 lea eax, [ebp+var_34]

·.text:004010C1 ; Занесение в регистр EAX указателя на начало буфера var_34 (buff)

·.text:004010C4 push eax

·.text:004010C4 ; Заталкивание его в стек

·.text:004010C4 ; Состояние стека (жирным шрифтом выделен аргумент функции printf)

·.text:004010C4; – 0x04 var_34 (buff)

·.text:004010C4; 0x00 var_54 (_pass)

·.text:004010C4; -0x10 var_44 (pass)

·.text:004010C4; -0x20 var_34 (buff)

·.text:004010C4; -0x40 var_14 (psw)

·.text:004010C4; -0x44 var_10 (user)

·.text:004010C5 call _printf

·.text:004010C5 ; Вызов printf( amp;buff[0])

·.text:004010CA add esp, 4

·.text:004010CA ; Балансировка стека

·.text:004010CD

·.text:004010CD loc_0_4010CD:; CODE XREF: main+2Ej

·.text:004010CD mov esp, ebp

·.text:004010CD ; Закрытие кадра стека, освобождение локальных переменных

·.text:004010CF pop ebp

·.text:004010CF ; Восстановление регистр EBP

·.text:004010D0 retn

·.text:004010D0 ; Выход из-под программы

·.text:004010D0 main endp

·

Таким образом, состояние стека на момент вызова функции pritnf следующее (передаваемый аргумент выделен жирным шрифтом):

· – 0x04 var_34 (buff)

· 0x00 var_54 (_pass)

· -0x10 var_44 (pass)

· -0x20 var_34 (buff)

· -0x40 var_14 (psw)

· -0x44 var_10 (user)

Если спецификаторов окажется больше, чем параметров, то функция начнет читать… содержимое буфера, в котором находится оригинальный пароль! По чистой случайности он оказался на верхушке стека, но даже если бы он был расположен ниже, это бы не изменило положения вещей, поскольку функции “printf “доступен весь кадр стека.

В программе функция вызывается без спецификаторов «printf( amp;buff[0])», но, ей передается указатель на начало буфера buff, который содержит сырую, не фильтрованную строку, введенную пользователем в качестве пароля, а она может содержать все что угодно, в том числе и спецификаторы.

Следующий эксперимент демонстрирует, как можно использовать такую ошибку программиста для проникновения в систему (то есть, подсматривания эталонного пароля, считанного из файла):

· buff.printf.exe

· printf bug demo

· Login:kpnc

· Passw:%x %x %x

· Invalid password: 5038394b a2a4e 2f4968

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

Рисунок 017.txt Расшифровка ответа программы

Таким образом, искомый пароль равен “K98PN*”. Если ввести его в программу (с соблюдением регистра), то результат ее работы должен выглядеть так:

· buff.printf.exe

· printf bug demo

· Login:kpnc

· Passw:K98PN*

· Password ok

Попытка использования спецификатора “%s” приведет вовсе не к выводу строки в удобно читаемом виде, а аварийному завершению приложения. Это продемонстрировано на рисунке, приведенном ниже:

Рисунок 075 Реакция системы на использование спецификатора %s

Такое поведение объясняется тем, что функция, встретив спецификатор “%s”, ожидает увидеть указатель на строку, а не саму строку. Поэтому, происходит попытка обращения по адресу 0x5038384B (“K98PN” в символьном представлении), который находится вне пределов досягаемости программы, что и вызывает исключение.

Спецификатор “%s” пригоден для отображения содержимого указателей, которые так же встречаются в программах. Это можно продемонстрировать с помощью следующего примера [318] (на диске, прилагаемом к книге, он содержится в файле “/SRC/buff.printf.%s.c”):

· #include «stdio.h»

· #include «string.h»

· #include «malloc.h»

·

· void main

· {

· FILE *f;

· char *pass;

· char *_pass;

· pass= (char *)malloc(100);

· _pass=(char *)malloc(100);

· if (!(f=fopen("buff.psw","r"))) return;

· fgets(_pass,100,f);

Популярные книги

Неудержимый. Книга IV

Боярский Андрей
4. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга IV

Школа Семи Камней

Жгулёв Пётр Николаевич
10. Real-Rpg
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Школа Семи Камней

Охота на эмиссара

Катрин Селина
1. Федерация Объединённых Миров
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Охота на эмиссара

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Идеальный мир для Социопата 11

Сапфир Олег
11. Социопат
Фантастика:
боевая фантастика
постапокалипсис
рпг
6.00
рейтинг книги
Идеальный мир для Социопата 11

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Императорский отбор

Свободина Виктория
Фантастика:
фэнтези
8.56
рейтинг книги
Императорский отбор

Новый Рал 7

Северный Лис
7. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 7

Наследник хочет в отпуск

Тарс Элиан
5. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник хочет в отпуск

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение

Восход. Солнцев. Книга VI

Скабер Артемий
6. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VI

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала