
В тази статия ще решим 25-то задание от сайта .
Организационна информацияСпециално за тези, които искат да научат нещо ново и да се развиват в областта на информационната и компютърната сигурност, ще пиша и ще споделям за следните категории:
- PWN;
- криптография (Crypto);
- мрежови технологии (Network);
- реверсно инженерство (Reverse Engineering);
- стеганография (Stegano);
- търсене и експлоатация на WEB-уязвимости.
В допълнение ще споделя опит в компютърната криминалистика, анализа на зловреден софтуер и фърмуер, атаки върху безжични мрежи и локални мрежови структури, провеждане на пентестове и написване на експлойти.
За да можете да получавате информация за нови статии, софтуер и друга информация, създадох и в областта на ИиКБ. Също така вашите лични запитвания, въпроси, предложения и препоръки .
Цялата информация е предоставена изключително за образователни цели. Авторът на този документ не носи никаква отговорност за вреди, причинени на когото и да е в резултат на използването на знания и методи, получени от изучаването на този документ.
Решение на задачата otp
Продължаваме с втория раздел. Ще кажа направо, че е по-сложно от първия, но този път не ни предоставят изходния код на програмата. Не забравяйте за обсъждането тук (https://t.me/RalfHackerPublicChat) и тук (https://t.me/RalfHackerChannel). Да започнем.
Натискаме иконата с надпис otp. Получаваме адрес и порт за свързване.

Свързваме се и оглеждаме на сървъра.

Флагът, който не можем да прочетем, програмата и нейният изходен код. Нека да разгледаме изходния код.

Разплитаме го. Програмата приема паролата като аргумент.

След това в променливата otp се запазват 16 случайни байта.

В папка tmp се създава файл със случайно име (първите 8 байта от otp) и в него се записват 8 случайни байта (вторите 8 байта от otp).

По някаква причина от създадения файл се прочитат стойности и се сравняват с въведената парола.

Тук е уязвимостта. Тя се състои в междинното запазване на генерираното число в файл. Можем да ограничим размера на файла, например до 0, така че при записването и прочитането с паролата да се сравнява 0. Можем да направим това така.
# ulimit -f 0 ![]()
Сега ще стартираме програмата.
![]()
Получаваме грешка. Не е страшно, може да бъде обработена с помощта на същия Python.
python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" ![]()
Получаваме флага и нашите лесни 100 точки. И продължаваме: в следващата статия ще разгледаме Web. Можете да се присъедините към нас в .
Източник: habr.com
