python

CTF. Пароли в Firefox. Пароль Android. Атака Bit-Flipping. Решение задач с r0от-мi Crypto. Часть 3

  • пятница, 4 сентября 2020 г. в 00:27:26
https://habr.com/ru/post/517662/
  • Информационная безопасность
  • Python
  • CTF


image

В данной статье ломаем шифры перестановки и Виженера, расшифруем сохраненный в браузере Mozilla Firefox пароль, расправляемся с блокировкой Android и разбираемся с атакой Bit-Flipping. Предыдущие части:

Часть 1 — Кодировки, шифр сдвига, брут хешей и создание картинки с помощью PIL python.
Часть 2 — Crypt, XOR, взлом нешифрованного ZIP и ГПСЧ.

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

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

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

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

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


Mozilla Firefox Password




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



Так как расширения нас не интересуют, то заходим в диру-браузер. Там конфигурационный файл профиля и еще одна директория.



Заходим в папку и просматриваем файлы.



Все пароли, хранящиеся в базе данных, зашифрованы, поэтому просто так посмотреть их не получится. Для расшифрования можно использовать этот скрипт.
python3 firefox_decrypt.py ~/Загрузки/.mozilla/firefox/o0s0xxhl.default/



Шифр Виженера




Нам дан зашифрованный текст, и нужно найти его автора. Так как это шифр Виженера, то воспользуемся онлайн декодером.



Выбираем автоматический режим.



И получаем открытый текст и ключ. Осталось загуглить текст и найти автора.

Android lock pattern




Нам дают дамп файловой системы андроид и просят найти пароль. Это очень легко сделать, имея доступ к файловой системе. Хеш пароля (SHA1) находится в файле /data/system/gesture.key.



Мы можем либо взять и пробрутить хеш, либо воспользоваться androidpatternlock.



Найден как пароль, так и графический ключ.

Шифр перестановки




Нам дают зашифрованное сообщение и просят его расшифровать. Так как это шифр Rail Fence, то воспользуемся уже знакомым нам онлайн декодером.



И теперь среди предложенных нам расшифровок нужно выбрать ту, которая имеет осмысленный текст.



И получаем ответ.

AES CBC — Атака Bit-Flipping




Нам дают хост и порт для подключения. Подключимся с помощью netcat.



Нам предоставляют варианты действий — зарегистрироваться или войти. Сначала зарегистрируемся.



И нам предоставили частично открытый и зашифрованный текст. Теперь логинимся с данным токеном.



Но после входа, мы не можем получить доступ к данным, так как не являемся членом группы.



С заданием разобрались, теперь давайте разберемся с атакой Bit-Flipping. Эта атака обычно происходит в тех случаях, когда функция шифрования принимает некоторые входные данные, добавляет случайную строку и добавляет к ней другую строку перед ее шифрованием (наш случай).

Ниже представлена схема расшифрования сообщения по алгоритму AES CBC.



Дело в том, что предыдущий блок шифртекста ксорится с последующим блоком, для того, чтобы снять наложение текста, в итоге мы имеем расшифрованный текст.

Таким образом, если мы изменим один байт шифртекста в предыдущем блоке, то изменится один байт открытого текста в следующем блоке.



Теперь вернемся к заданию. В открытом тексте имеется параметр is_member=false. Как изменить, сложно представить. Но так как у нас есть символы уравнения, для того, чтобы весь текст был кратен размеру блока, мы можем изменить их так, чтобы при расшифровывании получалась строка is_member=true.

Разберемся, как это сделать. Данная строка должна получиться при расшифровывании в последнем блоке — EvilP2. Для этого нам нужно собрать блок EvilC1.



Как это сделать: Мы имеем CC1 и PP2. Проксорив их между собой, мы можем получить DC2. Так как мы знаем, что EvilP2 содержит “;is_member=false]” и знаем DC2, то проксорив их между собой, можно получить EvilC1.

Регистрируемся еще раз.



Инициализируем начальные параметры.



Теперь получим известные нам блоки.



Теперь получим новые блоки.



Собираем нагрузку.



Пробуем залогиниться.



И ничего не вышло, нас обнаружили. Скорее всего это из-за наличия двух одинаковых параметров. Давайте убьем первый.



И теперь успешно логинимся и забираем токен.



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