
В тази статия ще решим 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 -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('.\/otp 0')" ![]()
Получаваме флага и своите 100 точки. И продължаваме: в следващата статия ще докоснем Web. Можете да се присъедините към нас в .
Източник: habr.com
