Разархивировать терминал mac os

Обновлено: 04.07.2024

У ряда пользователей OS X возникают сложности при работе с RAR архивами. Кто-то их решает путем установки бесплатных утилит из AppStore, но есть и более правильное решение.

Вообще эта заметка для тех, кто не хочет грузить свой Mac лишним ПО и умеет пользоваться терминалом.

Автор архиватора WinRar на самом деле не обделил вниманием и другие OS. Версии для Linux, FreeBSD и Mac OS X доступны для скачивания на официальном сайте, просто у них нет графического интерфейса.

Скачиваем архив для OS X и распаковываем в любую удобную папку.

Установка

Для того, чтобы пользоваться командами для архивации rar и распаковки unrar , их нужно установить. Делается это следующим образом:

или для El Capitan и выше:

На этом все. Команды теперь будут доступны из любой директории, где бы вы не находились.

Проверить все ли хорошо можно просто выполнив в терминале rar или unrar . В результате Вы должны увидеть номер версии и другую информацию!

И все же, ниже мы собрали несколько типовых примеров использования архиватора через командную строку на OS X.

Примеры использования

Создание архива каталога:

Создание архива из нескольких файлов:

Создание архива директории folder с паролем qwerty :

Создание архива с паролем, шифрующим и список файлов:

Создание архива без алгоритмов сжатия:

Создание архива с максимальным сжатием:

Распаковка архива в текущую директорию:

Распаковка архива в отдельную директорию:

На этом все. Спасибо за то, что прочитали до конца!

Обновлено 26 февраля, установка на OS X El Capitan и выше. Спасибо за комментарии e33 и neprokin!

Сергей 29.11.2016 в 18:58

Дмитрий Ильичев 29.11.2016 в 19:05

Если не находит команды, значит в папке /bin отсутствуют файлы rar и unrar. В терминале попробуй cd /bin и потом ls. Думаю проблема в установке.

Сергей 30.11.2016 в 18:30

Вот такой вот результат:

iMac-Kryvda:

kryvda$ cd /bin
iMac-Kryvda:bin kryvda$ sudo install -c -o $kryvda rar /bin
Password:
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
[-o owner] file1 file2
install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
[-o owner] file1 . fileN directory
install -d [-v] [-g group] [-m mode] [-o owner] directory .
iMac-Kryvda:bin kryvda$ sudo install -c -o $kryvda unrar /bin
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
[-o owner] file1 file2
install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
[-o owner] file1 . fileN directory
install -d [-v] [-g group] [-m mode] [-o owner] directory .
iMac-Kryvda:bin kryvda$ rar
-bash: rar: command not found
iMac-Kryvda:bin kryvda$ unrar
-bash: unrar: command not found

команда ls показывает что рар и унрар не существуют, подскажите где я допускаю ошибку.

Дмитрий Ильичев 01.12.2016 в 13:49

Для установки файлов, нужно быть в директории, где они находятся.
Скорее всего тебе нужно сначала перейти в директорию, где лежит распакованный и не установленный дистрибутив. Вероятнее всего это будет:

cd downloads/rar

Потом проверь, что там есть файлы rar и unrar. Если они там, то уже приступай к установке.

e33 19.10.2017 в 14:21

в elСap запись в /bin невозможна без отключения защиты целостности системных файлов. Аналогичного результата установки можно достичь по пути /usr/local/bin

neprokin 26.02.2018 в 15:53

Воситину так.
В Hight Sierra аналогично.

Дмитрий, исправь пожалуйста в инструкции.

sudo install -c -o $USER rar /usr/local/bin
sudo install -c -o $USER unrar /usr/local/bin

В сентябре, во время соревнований VolgaCTF, проходила конференция, на которой я впервые рассказал о своем исследовании стандартной программы по работе с архивами в macOS. Сегодня я представляю текстовую версию своего доклада.

Предисловие

Схема работы защищенной системы хранения

Схема работы защищенной системы хранения

В итоге я нашел способ обхода, однако был один нюанс: найденная проблема была не в самой системе хранения и не в ее функции проверки расширений. Всё дело было в самом zip. Казалось бы, столько статей написано про zip-архивы, что сложно удивить разбирающегося человека чем-то новым. Структура архива давно известна, написаны сотни документаций, выпущено несколько версий формата zip. Но все становится интереснее, если работа идет за ноутбуком производства Apple. В этой статье я хочу обсудить одну неочевидную особенность стандартной программы по созданию zip-архивов в macOS.

Как устроен zip-архив

Что же такое zip-архив? Zip-архив – это, в первую очередь, файл с определенной структурой. На изображении приведен пример строения типичного архива.

Структура типичного zip-архива

Структура типичного zip-архива

В типичном архиве есть три заголовка: local file header, central directory file header и end of central directory. В local file хранится информация о размере, дате изменения, а также имени файла. Кроме того, здесь находится непосредственно сам файл. В central dir содержится информация о различных атрибутах файла, о размере и имени файла, но в него не входит сам сжатый файл. В третьем заголовке можно найти информацию о количестве файлов внутри архива и их размере.

Я надеюсь, многие так и представляли себе zip-архив. Как можно заметить, имя файла дублируется в local file и в central dir. Это важно, но для начала вспомним, какие же существуют самые популярные уязвимости zip-архивов.

Известные уязвимости ZIP

Zip-slip

Zip-slip – самая известная уязвимость при работе с архивами. Очень популярна в заданиях на CTF. Позволяет распаковывать файл в произвольную директорию, с помощью " ../ " можно выйти из текущей директории в родительскую. Сгенерировать такой архив можно как руками, так и с помощью утилиты Evilarc.

Пример структуры архива, созданного для эксплуатации Zip-Slip.

Пример структуры архива, созданного для эксплуатации Zip-Slip.

Zip-symlink

Эта уязвимость известна в более узких кругах, но не менее популярна на CTF. Суть заключается в том, что в архив можно вложить символьную ссылку на определенный файл. При распаковке архива ссылка будет указывать на файл, прописанный в ней. Таким образом можно получить доступ к любому файлу на уязвимом сервере. Создать символьную ссылку можно командой ln –s /etc/passwd link . Заархивировать ссылку, а не файл, на который она указывает, можно при помощи опции -symlink в команде zip –symlink link.zip link .

Пример структуры архива, содержащего символьную ссылку.

Пример структуры архива, содержащего символьную ссылку.

Zip-bomb

Этот тип атак основан на возможностях алгоритмов сжатия внутри архива. При распаковке файлы или занимают очень много места на диске, или бесконечно рекурсивно распаковываются, в то время как сам архив занимает считанные байты.


Вернемся к защищенной системе хранения

Что же делать, если ни к чему из вышеперечисленного сервис не уязвим? Как хакать? Для этого еще раз внимательно посмотрим, как устроен zip-архив. Как я заметил выше, имя файла внутри архива дублируется в local file и в central dir. Зачем это сделано, ведь можно просто сохранять имя файла один раз? Для проверки целостности? Возможно.

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

Эээксперементы

Для тестирования этой особенности я создал четыре zip-архива: два архива с версиями zip 1(наиболее часто встречаемая версия zip) и два с версиями zip64 (по умолчанию используется при архивации на macOS). В одном архиве каждой версии я поменял имя файла в local file, а в другом – в central dir. В качестве злого расширения выбрано exe - для наглядности. На первом изображении показаны первые два архива версии zip 1, в которых изменены имена файлов соответственно в central dir и в local file.

Первые два архива версии zip 1

Первые два архива версии zip 1

На втором изображении показан архив zip64 с замененным именем файла в central dir.

Архив zip64 с замененным именем файла в central dir.

Архив zip64 с замененным именем файла в central dir.

На третьем изображении показан архив zip64 с замененным именем файла в local file.

Архив zip64 с замененным именем файла в local file.

Архив zip64 с замененным именем файла в local file.

Так-так, а zip64 – это кто?

Действительно, не многие помнят, что существует множество разных реализаций формата zip. Второй по популярности – zip64 – создан как модернизированная версия обычного zip. Он позволяет хранить значительно больше данных, практически исключая ситуацию, когда пользователь не может заархивировать свою петабайтную коллекцию котиков из-за огромного количества объектов. Основные отличия zip от zip64 представлены в таблице:

Основные отличия zip от zip64.

Основные отличия zip от zip64.

Тесты на распаковку

Интересно, какое название будет у файла test после распаковки каждого архива на разных платформах? Я протестировал архивы в macOS 11, Windows 10 и Debian 9. Для распаковки я использовал стандартные методы, однако в Debian для удобства я использовал консольную утилиту unzip. Так, на первом изображении показан результат распаковки в Windows. Как можно заметить, Windows при разархивации смотрит на имя файла, которое указано в структуре central dir.

Распаковка на Windows.

Распаковка на Windows.

На втором изображении показан результат распаковки в Debian. Как видим, Debian разархивировал тестовые архивы точно так же, как и Windows, отдав предпочтение имени, указанному в central dir.

Распаковка на Debian.

Распаковка на Debian.

На третьем изображении показан результат распаковки в macOS. Ого, что-то новое. Расширения магическим образом поменялись! Получается, что стандартная утилита для работы с архивами в macOS при распаковке подобных архивов смотрит на имя файла, указанное в local file.

Распаковка на macOS.

Распаковка на macOS.

Интересно, что во всех остальных популярных архиваторах, а также во всех популярных библиотеках к основным языкам программирования названия файлов архива берутся именно из central dir.

Бага не в стандарте, а в macOS

С полученными знаниями систему хранения на схеме можно представить иначе.



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

Скрипт для создания подобных архивов

Для более глубокого изучения уязвимости я решил автоматизировать подмену имени файла внутри архива и написал два скрипта . MacKekZip.py меняет имя внутри архива в секции local file, а InvertedMacKekZip.py, соответственно, меняет имя файла в секции central dir.

Сценарии атак

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

Неполиткорректное название файла. Возможный удар по репутации высокопоставленных сотрудников компании, например топ-менеджера. Сотрудник может получить от недоброжелателя специальный архив с неким документом; он проверяет файл на своем домашнем компьютере под Windows и не видит подвоха. Распаковав архив на macOS во время важной встречи, он внезапно обнаруживает, что имя файла совсем не то, что раньше, хотя архив тот же. Имя файла может быть оскорбительным для участников встречи и сотрудник может попасть в неловкую ситуацию.

Другое расширение файла. Непосредственная возможность сохранения zip-архивов, содержащих опасные файлы, в защищенном контуре, минуя системы проверки расширения файла внутри архива. Так как контур защищенный, пользователи всецело доверяют находящимся в нем файлам. При распаковке такого архива на macOS пользователь может получить вредоносный файл, который пользователям других систем будет отображаться в виде простого текстового файла с непонятным содержимым.

Полиглоты. Существуют такие файлы, которые содержат в себе свойства нескольких типов файлов. Например, такой полиглот можно открыть как html-страничку и как pdf-документ, не меняя структуру файла, а лишь программу, которая отображает его содержимое. Использование полиглотов для эксплуатации данной уязвимости открывает большие возможности: можно сделать так, что на macOS полиглот распаковывается с расширением html, а на других платформах – с pdf. Таким образом, если добавить в html и pdf разные ссылки на подконтрольный злоумышленнику сервер, можно отслеживать, на какой платформе и в какое время был открыт вредоносный архив, и так собирать информацию об использовании устройств на базе macOS в конкретной компании. Возможности полиглотов безграничны, подробнее о них можно почитать, например, тут.

Одна из удивительных возможностей использования уязвимости – это подмена содержимого файла, хотя, казалось бы, менять можно только имя файла. Допустим, есть два файла: один – это файл с безопасными зависимостями requirements.txt, а второй – с вредоносными зависимостями evil_requirements.txt. При изменении архива, содержащего эти два файла, можно заменить имя первого файла в local file на ./tmp/ . Таким образом, вместо текстового файла создастся директория, на которую никто не обратит внимания. Имя же второго файла можно заменить на requirements.txt в local file, а в central dir – на ./tmp/ . Тогда разработчик на macOS может собрать проект используя полученный в архиве вредоносный файл с зависимостями, в то время как у другого разработчика на linux проект соберется с правильными зависимостями. Оба разработчика не будут подозревать, что на самом деле у них – разные файлы с зависимостями, а в архиве два таких файла вместо одного.

Шикарный 0-day (нет)

В процессе исследования мне стало интересно: неужели ни один исследователь не попробовал такой простой трюк за столько лет существования стандарта zip? Оказывается, что подобная уязвимость была найдена еще в 2009 году израильским экспертом Danor Cohen. Старая версия WinRAR позволяла выполнять произвольный код во время открытия файла из архива. Виной всему была точно такая же подмена имени файла в local file архива.

Пример эксплуатации RCE в WinRAR

Пример эксплуатации RCE в WinRAR

Реальный импакт уязвимости

Казалось бы, точно такая же уязвимость, как и 12 лет назад, отличный 0-day(4425-day). Однако само устройство стандартной утилиты для работы с архивами в macOS не позволяет в полной мере раскрыть потенциал уязвимости, так как:

Пользователь не видит содержимое архива до распаковки – соответственно, он изначально не знает, с каким расширением его ждет файл после нее.

Во время распаковки архива не происходит мгновенное выполнение файла – вместо этого он сразу сохраняется в текущую директорию файловой системы.

Не высвечивается окошечко PWNED, а значит и возможности эксплуатации сводятся к минимуму.

Реакция Apple

Данная особенность была найдена еще в марте, было написано письмо в команду Apple, но специалисты корпорации не нашли в ней ничего опасного. Однако, они не исключили возможность исправления уязвимости когда-то в будущем. Прошло уже больше полугода, архиватор не починили, и я решил рассказать сообществу об этой находке, которая, как я все еще считаю, может потенциально нести в себе угрозу для конечных пользователей. Однако, самое интересное еще впереди, так как на этом проблемы macOS не заканчиваются, но о них я расскажу в другой раз.


Невозможно раскрыть ошибку на Mac

Причины, по которым невозможно развернуть Zip файл?

Способ 1: распаковать файл с помощью терминала

Когда простой двойной щелчок по zip не работает, вы всегда можете попробовать разархивировать файлы в Терминале. Иногда файлы большого размера не могут быть распакованы в Archive Utility, и его необходимо распаковать в Terminal. Для распаковки zip-файлов в Терминале используется простая команда «unzip». При использовании этой команды файл перейдет в папку учетной записи пользователя. Чтобы разархивировать файл в Терминале, выполните следующие действия:

(Вы можете перетащить zip-файл, чтобы он тоже мог вставить каталог)

Если это не решит проблему для вас, не беспокойтесь, попробуйте следующий метод ниже.

Способ 2: использование утилиты для декомпрессии

Теперь иногда могут возникнуть проблемы с вашими разрешениями или открытием zip-файла в обычном режиме. Но в App Store и в Интернете существует множество программ Utility, которые помогут вам без проблем распаковать zip-файлы. Вы можете скачать Stuffit Expander из Mac App Store и попробуйте использовать это для zip-файла. Большинство пользователей не смогли разархивировать файлы даже с помощью терминала, но использование этого программного обеспечения помогло им решить проблему. Вы можете проверить шаги ниже, чтобы разархивировать с помощью этого приложения:

  1. Откройте Mac Магазин приложений нажав на значок в Док

    App Store в Mac OS
  2. Теперь найдите приложение «Stuffit Expander”В магазине приложений
  3. Нажми на Получить а потом устанавливать, это установит приложение на ваш Mac OS
    Установка Stuffit Expander в магазине приложений
  4. После установки нажмите «Открыть» или перейдите к Прожектор (Command + пробел) и искать «Stuffit Expander», Затем откройте его
  5. Теперь нажмите на Значок расширителя Stuffit приложения
  6. Найдите ZIP-файл, который вы хотите распаковать и открыть

    Распаковка zip-файла через Stuffit Expander
  7. Затем выберите папку, в которую вы хотите разархивировать
  8. Это распакует сжатый файл для вас.

Автоматизация рутины в OS X. Часть 9. Пакетная архивация файлов

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

Что мы будем делать?

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

Как открыть Terminal?

В Finder открыть папку Macintosh HD -> Программы -> Утилиты и найти в ней иконку приложения Terminal.

Снимок экрана 2015-10-12 в 20.19.32

В результате на экране должно появиться такое окно.

Снимок экрана 2015-10-12 в 20.23.40

Как извлечь файлы из архива?

С помощью встроенной в OS X утилиты unzip:

Как просмотреть свойства и содержимое архива не извлекая файлы?

Извлечение файлов из огромных архивов может занять десятки минут. Просмотреть их содержимое без извлечения поможет утилита zipinfo:

Как упаковать файлы в архив zip?

Данная команда укладывает в архив все содержимое папки exampleFolder:

Как защитить архив паролем?

После выполнения команды Терминал попросит ввести пароль, который надо не забыть:

Как добавить файл в существующий архив?

Как добавить несколько файлов к существующему архиву?

Как упаковать файлы в архив tar.gz?

Как извлечь файлы из архива tar.gz?

Обратите внимание, что утилита unzip не подходит для этой цели:

Как упаковать файлы в архив tar.bz?

Как извлечь файлы из архива tar.bz?

Как заархивировать все файлы и папки в активной директории?

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

А как быть с WinRar архивами?

Предыдущие публикации из цикла «Автоматизация рутины в OS X» вы можете найти по следующим ссылкам:

Читайте также: