Skip to content
This repository has been archived by the owner on Feb 14, 2023. It is now read-only.

Latest commit

 

History

History
22 lines (16 loc) · 1.61 KB

WRITEUP.md

File metadata and controls

22 lines (16 loc) · 1.61 KB

Безопасность должна быть доступной: Write-up

Нам дан код на C, использующий структуру SafeString. У нее есть метод set, который устанавливает символ только если попадает в границы строки.

Затем есть метод safeGets, который реализует ввод строки, но не более какого-то количества символов. Видим, что в конце вызывается set(s, size, 0).

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

Нам дают ввести размер ввода, который должен быть не больше размера строки, то есть максимальное значение 256. Тогда функция safeGets попробует поставить туда ноль, но поскольку этот индекс вылезает за пределы строки, она просто не будет этого делать. И мы получим флаг.

Итого:

  1. Вводим 256
  2. Вводим 256 различных символов чтобы забить строку

Флаг: ugra_safe_0r_no7_5afe_3tq6n01fjslf