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

Lab3_otchet

.docx
Скачиваний:
27
Добавлен:
28.06.2021
Размер:
597.45 Кб
Скачать

Федеральное агентство связи

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное

учреждение высшего образования

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

 

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

 

Отчёт по лабораторной работе №3 по дисциплине «Защита информации в глобальных сетях»

 

Выполнил студент группы

Москва, 2020

Порядок выполнения:

  1. Выполнить настройку окружения:

    1. Установить виртуальную машину

    2. Установить операционную систему

    3. Установить компилятор языка C

    4. Установить отладчик

    5. Установить Meatasploit Framework

  2. Скомпилировать исходный файл с опциями -fno-pie -fno-stack-protector -z execstack -m32 -g

  3. Запустить под отладчиком

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

  5. Перезапустить программу и ввести такую строку, которая приведёт к модификации всех байтов адреса возврата

  6. Дизассемблировать функцию main и найти адрес инструкции, которая следует за инструкцией “mov eax,0”

  7. Подготовить файл с входными данными, в котором в качестве адреса возврата будет указан адрес инструкции из пункта 6

  8. Запустить программу, перенаправив ввод из файла, созданного в пункте 7

  9. Запустить утилиту msfvenom для генерации shell кода: msfvenom –format c –platform linux -p linux/x86/exec -e x86/call4_dword_xor –bad-chars ‘\x0a\x0b\x0c\x0d’ -a x86 AppendExit=true CMD=’bash’

  10. Подготовить файл, в котором будет строка, содержащая те же данные, что и в пункте 5, и дополнительно байты shell кода из пункта 9.

  11. Запустить программу под отладчиком, установить точку останова на последней инструкции функции read_password

  12. После остановки программы просмотреть 100 байтов памяти, начиная с адреса, хранящемся в регистре ESP

  13. Вычислить адрес начала исполняемого кода

  14. Отредактировать файл, указав правильный адрес

  15. Перезапустить приложение

Ход работы:

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

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

Исходный код программы на языке C представлен ниже:

#include <stdio.h>

#define SIZE 12

void read_password() {

char buffer[SIZE];

printf(“password”);

scanf(“%s”, buffer);

}

int main() {

read_password();

return 0;

}

Скомпилируем исходный файл с опциями -fno-pie -fno-stack-protector -z execstack -m32 -g и запустим его под отладчиком (рисунок 2)

Рисунок 2 – Компиляция и запуск программы

Дизассемблируем функцию read_password (рисунок 3).

Рисунок 3 – Дизассемблирование функции read_password

Если посмотреть на строку со смещением +7, то видно, что на локальные переменные было выделено 24 байта (0х18 в 16-ричной системе). Соответственно, если ввести больше 24 символов, то они затрут адрес возврата, который был положен на стек, и код исполнится с ошибкой (рисунок 4)

Рисунок 4 – Запуск кода с ошибкой

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

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

Адрес команды, идущей после команды по смещению +15 – 0x00001232

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

Рисунок 6 – Создание и запуск файла

Запустим утилиту msfvenom для генерации shell кода, который будет вызывать bash (рисунок 7)

Рисунок 7 – Результат работы утилиты msfvenom

Создадим строку с байтами shell кода (рисунок 8).

Рисунок 8 – Строка с байтами shell кода

Запустим программу под отладчиком, подадим на вход сформированный файл с байтами shell кода и поставим точку останова на инструкции ret функции read_password (рисунок 9)

Рисунок 9 – Запуск программы с точкой останова

Посмотрим 100 байтов памяти, начиная с адреса, хранящегося в регистре ESP (рисунок 10)

Рисунок 10 – 100 байтов памяти в момент остановки

Первые 4 байта – буквы ABCD. Необходимо найти следующий после них адрес. Т.к. исходный адрес 0хffffd08c, то прибавив 4 в 16-рисной системе получим 0xffffd090. Отредактируем файл и укажем в нем данный адрес (рисунок 11)

Рисунок 11 – Отредактированный файл

Перезапустим приложение (рисунок 12)

Рисунок 12 – Приложение, выполняющее shell код

Вывод: В данной лабораторной работе была рассмотрена и применена уязвимость переполнения буфера.

Соседние файлы в предмете Защита информации в глобальных сетях