В данной статье решим 25-е задание с сайта
Организационная информацияСпециально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
- PWN;
- криптография (Crypto);
- cетевые технологии (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