Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux
В данной статье решим 25-е задание с сайта pwnable.kr.

Организационная информацияСпециально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

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

Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.

Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Решение задания otp

Продолжаем второй раздел. Скажу сразу, что сложнее первого, но в этот раз на предоставляют исходный код программы. Не забываем про обсуждение здесь(https://t.me/RalfHackerPublicChat) и здесь (https://t.me/RalfHackerChannel). Начнем.

Нажимаем на иконку с подписью otp. Нам дают адрес и порт для подключения.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Подключаемся и осматриваемся на сервере.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Флаг, который мы не можем прочитать, программа и ее исходный код. Давайте посмотрим исходник.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Раберем его. Программа принимает в качестве аргумента пароль.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Далее в переменную otp сохраняется рандомные 16 байт.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

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

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Зачем-то и созданного файла считывается значение и сравнивается с введенным паролем.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Здесь и присутствует уязвимость. Она заключается в промежуточном сохранении генерируемого числа в файл. Мы можем ограничить размер файла, к примеру до 0, тогда при записи и считывании с паролем будет сравниваться 0. Сделать это можно так.

# ulimit -f 0

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Теперь запустим программу.

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Получаем ошибку. Не беда, ведб ее можно обработать с помощью того же питона.

python -c "import os, signal; signal.signal(signal.SIGXFSZ, signal.SIG_IGN); os.system('./otp 0')" 

Решение задания с pwnable.kr 25 — otp. Ограничение рамера файла в Linux

Получаем флаг и свои легкие 100 очков. И мы продолжаем: в следующей статье затронем Web. Вы можете присоединиться к нам в Telegram.

Источник: habr.com