https://habr.com/ru/post/517662/- Информационная безопасность
- Python
- CTF
В данной статье ломаем шифры перестановки и Виженера, расшифруем сохраненный в браузере 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. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.