Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №1 / Лабораторная работа №1

.docx
Скачиваний:
3
Добавлен:
02.01.2024
Размер:
614.54 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

(МТУСИ)

Кафедра: «Информационной безопасности»

Отчёт по лабораторной работе №1

Дисциплина: «Защита информации в глобальных сетях»

по теме:

«Уязвимость переполнения буфера»

Выполнили: студент группы МБСТ0000

_________________________

Проверил:

Старший преподаватель кафедры «Информационная безопасность»

Барков Вячеслав Валерьевич

_________________________

Москва, 2025

Содержание

Y

1) Цель работы 3

2) Выполнение лабораторной работы 3

2.1) ПО с уязвимостью переполнения буфера 3

2.2) ПО с закрытой уязвимостью переполнения буфера 7

3) Заключение 10

  1. Цель работы

Выполнить индивидуальное задание по теме «уязвимость переполнения буфера». Написать программный код с уязвимостью переполнения буфера, показать, что уязвимость есть и показать способ исправления кода.

  1. Выполнение лабораторной работы

2.1) ПО с уязвимостью переполнения буфера

Установим компилятор языка СИ gcc, отладчик gdb представлен на рисунке 1

Рисунок 1Версия gcc и gdb

Исходный код программы представлен в листинге 1.

Листинг 1 – Программный код с уязвимостью переполнения буфера

#include <stdio.h>

void read_string()

{

char buffer[16];

printf("String: ");

scanf("%s", buffer);

}

int main()

{

read_string();

return 0;

}

Скомпилируем исходный файл с опциями –fno-stack-protector –z execstack –m32 –g main.c –o main и запустим его через компилятора gcc представлен на рисунке 2.

Рисунок 2 - Компиляция и запуск программы без переполнения буфера

Произведем переполнения буфера, введя строку больше буфера представлено на рисунке 3.

Рисунок 3 - Компиляция и запуск программы переполнив буфер

Дизассемблируем функцию read_string (рисунок 4)

Рисунок 4 - Дизассемблируем функцию read_string

Дизассемблируем функцию main (рисунок 5)

Рисунок 5 - Дизассемблируем функцию main

Сделаем файл, в котором будет прописана строка, которая переполняет буфер и на конце строки будет записан “DCBA”

Рисунок 6 – Файл для переполнения буфера с строкой DCBA

После запуска программы байтами DCBA перезаписан адрес возврата, вместо адреса возврата появятся следующие значения 44 43 42 41. Это коды букв D C B A. Возникла ошибка segmentation fault, переход будет некорректный и возникает ошибка, представленная на рисунке 7.

Рисунок 7 – Файл для переполнения буфера с строкой DCBA

2.2) ПО с закрытой уязвимостью переполнения буфера

На листинге 2 представлен программный код, которая убирает уязвимость переполнения буфера.

Листинг 2 - Программный код с закрытой уязвимостью переполнения буфера

#include <stdio.h>

void read_string()

{

int sizeBuffer = 16

char buffer[sizeBuffer];

printf("String: ");

fgets(buffer, sizeBuffer, stdin)

printf("%s", buffer);

}

int main()

{

read_string();

return 0;

}

Скомпилируем программу и запустим её. Введем строку, которая меньше размера буфера и вывод строки правильный представлен на рисунке 8.

Рисунке 8 - Скомпилированная программа без переполнения буфера

Введём в программу строку, которая будет переполнять буфер и посмотрим на вывод программы, который представлен на рисунке 9.

Рисунке 9 - Скомпилированная программа с переполнения буфера

Как видно из вывода программы, мы обрезали лишние элементы и вывели только первые 16 символов.

Попробуем записать строку, которую мы использовали для переполнения буфера. Данная операция представлена на рисунке 10.

Рисунок 10 – Файл для переполнения буфера с строкой DCBA

На рисунке 11, мы видим, что программный код с закрытой уязвимостью не дает нам возможность перезаписать код возврата.

Рисунок 11 – Выполнения кода с закрытой уязвимостью, и на вход подается строка, которая вызывает переполнения буфера

  1. Заключение

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

Соседние файлы в папке Лабораторная работа №1