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

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

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

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

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

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

(МТУСИ)

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

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

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

по теме:

«Уязвимость форматной строки»

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

_________________________

Проверил:

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

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

_________________________

Москва, 2025

Содержание

Y

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

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

2.1) ПО с уязвимостью форматной строки 3

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

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

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

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

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

2.1) ПО с уязвимостью форматной строки

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

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

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

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

#include <stdio.h>

#include <string.h>

void print(char* buffer)

{

printf(buffer, 42, 100);

}

int main(int argc, char **argv)

{

char buffer[1024];

if (argc >= 2)

{

strncpy(buffer, argv[1], 1024);

print(buffer);

}

return 0;

}

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

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

Сделаем уязвимость форматной строки, прочитаем память на стеке при помощи ввода %08x и получим значения в ячейках памяти.

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

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

На листинге 2 представлен ниже программный код, которая убирает уязвимость форматной строки. Сделаем так, что printf через %s, и не мог использовать спецсимволы, воспринимал всё как строку.

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

#include <stdio.h>

#include <string.h>

void print(char* buffer)

{

printf(«%s», buffer);

}

int main(int argc, char **argv)

{

char buffer[1024];

if (argc >= 2)

{

strncpy(buffer, argv[1], 1024);

print(buffer);

}

return 0;

}

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

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

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

Рисунке 9 - Скомпилированная программа с уязвимостью форматной строки

Как видно из вывода программы, мы больше не можем получить доступ к значениям ячейкам памяти. Программа выводит только то, что мы введём в строчку.

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

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

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