В тази статия ще решим 25-та задача от сайта
организационна информацияСпециално за тези, които искат да научат нещо ново и да се развиват във всяка област на информационната и компютърна сигурност, ще пиша и говоря за следните категории:
- нематод;
- криптография (Crypto);
- мрежови технологии (Network);
- обратно (Reverse Engineering);
- стеганография (Stegano);
- търсене и използване на WEB уязвимости.
В допълнение към това ще споделя опита си в компютърна криминалистика, анализ на злонамерен софтуер и фърмуер, атаки срещу безжични мрежи и локални мрежи, провеждане на пентестове и писане на експлойти.
За да можете да научите за нови статии, софтуер и друга информация, създадох
Цялата информация се предоставя само за образователни цели. Авторът на този документ не поема никаква отговорност за щети, причинени на когото и да било в резултат на използването на знанията и методите, получени в резултат на изучаването на този документ.
Решаване на задачата otp
Да продължим с втория раздел. Веднага ще кажа, че е по-сложно от първото, но този път те не предоставят изходния код на програмата. Не забравяйте за дискусията тук (https://t.me/RalfHackerPublicChat) и тук (https://t.me/RalfHackerChannel). Нека да започнем.
Кликнете върху иконата с подпис otp. Дават ни се адрес и порт, към които да се свържем.
Свързваме се и разглеждаме сървъра.
Флаг, който не можем да разчетем, програма и нейния изходен код. Нека погледнем източника.
Нека го подредим. Програмата приема парола като аргумент.
След това произволни 16 байта се съхраняват в променливата otp.
Създава се файл с произволно име в папката 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 точки. И продължаваме: в следващата статия ще се докоснем до мрежата. Можете да се присъедините към нас на
Източник: www.habr.com