
Packer Fuzzer — это быстрый и эффективный сканер для обнаружения уязвимостей на веб-сайтах, созданных с помощью сборщиков модулей JavaScript, таких как Webpack.
Любые прямые или косвенные последствия и убытки, возникшие в результате распространения или использования функций обнаружения, предоставляемых инструментом Packer Fuzzer (далее — данный инструмент), ложатся на плечи самого пользователя. Команда разработчиков Packer Fuzzer (далее — данная команда) не несет за них никакой ответственности.
На основе результатов проверки данный инструмент автоматически генерирует отчет о сканировании. Содержимое этого отчета и любые другие производные материалы не могут представлять позицию или точку зрения данной команды.
При использовании данного инструмента соблюдайте соответствующие законы и нормативные акты страны пользователя и страны, где находится целевая система. Любое несанкционированное тестирование недопустимо. В случае возникновения связанных с этим правонарушений мы оставляем за собой право привлечь вас к ответственности в соответствии с законом и в полной мере сотрудничать с соответствующими органами в проведении расследования.
С ростом популярности инструментов фронтенд-сборки WEB, часто ли вы сталкиваетесь при повседневном пентестинге и услугах безопасности с веб-сайтами, построенными на "Webpack bundler"? Такие сборщики упаковывают все API-интерфейсы и параметры API в один файл для централизованного вызова, что позволяет нам быстро обнаружить функциональность и список API сайта. Но зачастую количество JS-файлов, создаваемых такими сборщиками, чрезвычайно велико, а общий объем JS-кода огромен (до десятков тысяч строк), что создает большие неудобства при ручном тестировании. Именно для решения этой проблемы был создан инструмент Packer Fuzzer.
Данный инструмент поддерживает автоматическое нечеткое извлечение API-интерфейсов целевого сайта и параметров, соответствующих этим API, а также поддерживает быстрое и эффективное обнаружение семи основных уязвимостей: неавторизованный доступ, утечка конфиденциальной информации, CORS, SQL-инъекции, горизонтальное повышение привилегий, слабые пароли, произвольная загрузка файлов. После завершения сканирования инструмент автоматически генерирует отчет. Вы можете выбрать версию HTML для удобного анализа, а также более формальные версии doc, pdf, txt.
Вам не нужно беспокоиться о языковых проблемах, связанных с интернационализацией. Инструмент поставляется с пятью основными языковыми пакетами (включая шаблоны отчетов): упрощенный китайский, французский, испанский, английский, японский (отсортировано по точности перевода), переведенные нашей очень непрофессиональной командой.
Примечание: В первой версии инструмента оптимизация правил выполнена только для сборщика Webpack, правила для других сборщиков ожидаются в будущем.
Данный инструмент разработан на языке Python3. Перед запуском убедитесь, что у вас установлено программное обеспечение Python3.X и pip3. Если среда не установлена, следуйте инструкции: https://www.runoob.com/python3/python3-install.html
Пользователи MacOS могут быстро установить с помощью следующих команд:
brew install python3 # автоматически установит pip3
Пользователи Ubuntu могут быстро установить с помощью следующих команд:
sudo apt-get install -y python3 && sudo apt install -y python3-pip
Пользователи CentOS могут быстро установить с помощью следующих команд:
sudo yum -y install epel-release && sudo yum install python3 && yum install -y python3-setuptools && easy_install pip
Данный инструмент будет запускать нативный код NodeJS через node_vm2, поэтому мы рекомендуем установить среду NodeJS (другие среды выполнения JS не рекомендуются, так как могут привести к сбоям парсинга). Если среда не установлена, следуйте инструкции: https://www.runoob.com/nodejs/nodejs-install-setup.html
Вы можете запустить инструмент с помощью команды python3 PackerFuzzer.py [options]. Описание параметров options:
-h (--help)
Команда справки, не требует дополнительных аргументов. Показывает все поддерживаемые параметры и их краткое описание.
-u (--url)
URL-адрес целевого сайта для сканирования. Обязательный параметр. Например: -u https://demo.poc-sir.com.
-c (--cookie)
Дополнительные cookies. Может быть пустым. Если заполнено, передается глобально. Например: -c "POC=666;SIR=233".
-d (--head)
Дополнительные HTTP-заголовки. Может быть пустым. Если заполнено, передается глобально. По умолчанию: Cache-Control:no-cache. Например: -d "Token:3VHJ32HF0".
-l (--lang)
Языковой параметр. Если пусто, автоматически выбирается язык системы. Если нет соответствующего языкового пакета, автоматически переключается на английский интерфейс. Доступны следующие языковые пакеты: упрощенный китайский (zh), французский (fr), испанский (es), английский (en), японский (ja). Например: -l zh.
-t (--type)
Два режима: базовый и расширенный. Если пусто, по умолчанию используется базовый. Расширенный режим выполняет повторное сканирование всех API, извлекает соответствующие параметры и проверяет на: SQL-инъекции, горизонтальное повышение привилегий, слабые пароли, произвольную загрузку файлов. Для включения используйте adv. Например: -t adv.
-p (--proxy)
Глобальный прокси. Может быть пустым. Если заполнено, используется прокси-сервер. Например: -p https://hack.cool:8080.
Если вы столкнулись с кажущимся зависанием или прерыванием сканера из-за непредвиденной ошибки, не волнуйтесь. Вы можете найти SQLite-базу данных с расширением .db в соответствующей папке кэша в каталоге tmp. Открыв ее, вы увидите, что все текущие результаты сохраняются в этой базе данных, и вы можете анализировать результаты прямо из кэша.
Мы рекомендуем настраивать baseurl для повышения точности сборки API и уменьшения количества запросов. Найти baseurl несложно: просто активируйте любой API на целевом сайте и обратите внимание на недостающую часть.
Мы не рекомендуем использовать расширенный режим на больших и сложных сайтах, так как в некоторых случаях он может тратить огромное количество времени на постоянное выполнение регулярных выражений в фоне, что может привести к кажущемуся зависанию.
Если API сайта A находятся на сайте B: вы можете использовать параметр --ah (--apihost), чтобы задать адрес сервера API.
Если в Windows невозможно создать или прочитать базу данных, щелкните правой кнопкой мыши и выберите Запуск от имени администратора. В Linux/Mac также обращайте внимание на права доступа, рекомендуется использовать команду sudo.
Вы можете оставить ISSUE в репозитории Github: https://github.com/rtcatc/Packer-Fuzzer/issues
Если вы считаете, что цель не подходит для публичного обсуждения, вы можете отправить нам письмо: admin[at]hackinn.com
При отправке, чтобы облегчить нам анализ, приложите соответствующий файл журнала из каталога logs. Спасибо за сотрудничество!
Также вы можете отсканировать QR-код группового чата слева внизу, чтобы присоединиться к нашей дискуссионной группе в WeChat (временно недоступно из-за ограничений WeChat), или отсканировать личный QR-код "天下大木头(KpLi0rn)" справа с пометкой "Packer Fuzzer", чтобы он добавил вас в группу:
Poc Sir
KpLi0rn
Liucy
RachesseHS
v1.0 2020/09/30
v1.1 2020/11/21
Исправлены некоторые проблемы совместимости с Windows;
Улучшена обработка игнорирования сертификатов;
Исправлены несколько ошибок, которые могли вызывать серьезные сбои сканера.
v1.2 2021/01/21
Добавлена функция распознавания фронтенд-сборщиков и отображение дерева активов;
Оптимизированы правила асинхронного извлечения, добавлены два новых типа правил для API;
Исправлена ошибка, из-за которой не генерировались отчеты и база данных;
Добавлен тихий режим для облегчения пакетного тестирования или интеграции с несколькими платформами;
Срочно исправлена уязвимость, которая могла привести к произвольному выполнению команд.
v1.3 2021/04/23
Исправлены несколько ошибок, которые могли приводить к аномалиям при обнаружении;
PyExecJS заменен на более безопасный node_vm2;
Улучшен интерфейс терминала, добавлены новые интерактивные подсказки;
Оптимизирован режим обработки BaseDir для большего удобства.
v1.4 2022/06/19
Исправлены несколько ошибок, которые могли приводить к аномалиям при работе сканера;
Удалены устаревшие расширения Python;
Улучшен HTML-отчет: теперь отображается длина содержимого ответа API и возможна сортировка;
Добавлен механизм переключения между POST и GET запросами;
Добавлена возможность настройки заголовка Content-Type;
Добавлена возможность настройки данных тела POST-запроса;
Добавлена возможность настройки адреса сервера API.
Пользователи MacOS могут быстро установить с помощью следующих команд:
brew install node
Пользователи Ubuntu могут быстро установить с помощью следующих команд:
sudo apt-get install nodejs && sudo apt-get install npm
Пользователи CentOS могут быстро установить с помощью следующих команд:
sudo yum -y install nodejs
Используйте следующую команду для однократной установки необходимых библиотек Python:
pip3 install -r requirements.txt
-j (--js)
Дополнительные JS-файлы. Может быть пустым. Если вы считаете, что есть другие JS-файлы, которые необходимо проанализировать, используйте этот параметр. Например: -j https://demo.poc-sir.com/js/index.js,https://demo.poc-sir.com/js/vue.js.
-b (--base)
Указание средней части API (например, для API https://demo.poc-sir.com/v1_api/login base dir = v1_api). Может быть пустым. Если вы считаете, что автоматически извлеченный base dir неверен, используйте этот параметр. Например: -b v1_api.
-r (--report)
Формат отчета. Если пусто, по умолчанию генерируются отчеты в форматах HTML и DOC. Доступные форматы: html, doc, pdf, txt. Например: -r html,pdf.
-e (--ext)
Включение/выключение плагинов расширения. Инструмент поддерживает пользовательские плагины, которые должны быть помещены в каталог ext (инструкция по написанию — в файле demo.py в этом каталоге). По умолчанию отключено. При включении с помощью команды on инструмент автоматически выполнит плагины из соответствующего каталога. Например: -e on.
-f (--flag)
Параметр безопасности SSL-соединения. Если пусто, по умолчанию выключен. В этом состоянии блокируются все небезопасные соединения. Если вы хотите игнорировать состояние SSL, используйте 1 для включения, игнорируя все ошибки сертификатов. Например: -f 1.
-s (--silent)
Тихий режим. При включении все запросы типа YES/NO автоматически устанавливаются в YES, а содержимое после параметра становится именем отчета (пользовательское имя). Подходит для автоматических, пакетных операций и вызова из плагинов. Например: -s Scan_Task_777.
--st (--sendtype)
Параметр метода запроса. Поддерживает POST и GET. При включении будет использовать соответствующий метод для всех API. Если не задан, будет выполнять интеллектуальный запрос на основе HTTP-статуса.
--ct (--contenttype)
Параметр Content-Type. Позволяет настроить заголовок Content-Type в HTTP-запросах при сканировании. Если не задан, будет выполнять интеллектуальный запрос на основе HTTP-статуса.
--pd (--postdata)
Параметр содержимого POST. Позволяет настроить тело POST-запроса (будет использоваться для всех запросов, только для POST-сценариев). Если не задан, будет выполнять интеллектуальный запрос на основе HTTP-статуса.
--ah (--apihost)
Параметр домена API. Позволяет задать доменное имя для всех API-запросов при сканировании. Например: часть API (извлеченный путь из JS) — /v1/info, URL сканирования (-u) — http://exp.com/. Если параметр apihost задан как https://pocsir.com:777/, то API станет https://pocsir.com:777/v1/info, а не http://exp.com/v1/info. Используется для сценариев, где API и фронтенд находятся на разных доменах или серверах.
--fe (--fileext)
Параметр расширения API. Позволяет добавить определенное расширение ко всем API для случаев, когда при извлечении API расширение отсутствует. Например: если извлеченный API — https://pocsir.com:777/v1/info, при указании --fe .json инструмент автоматически преобразует его в https://pocsir.com:777/v1/info.json для сканирования.