
TypeScript сценарие-ориентированный фреймворк для фаззинга веб-приложений
Инструмент для фаззинга веб-приложений на основе сценариев, поддерживающий генерацию фазза с помощью генетического алгоритма.
Скачайте бинарник со страницы Releases или скомпилируйте из исходников.
$ curl -Lo shfz.tar.gz https://github.com/shfz/shfz/releases/download/v0.0.3/shfz_0.0.3_linux_amd64.tar.gz
$ tar -zxvf shfz.tar.gz
$ sudo mv shfz /usr/local/bin/
$ sudo chmod +x /usr/local/bin/shfz
Для запуска фаззинга с этим инструментом необходимо создать сценарий (который вызывает HTTP-запросы к веб-приложению, автоматически встраивая фазз в параметры запроса, такие как username, password).
Обратитесь к shfz/shfzlib за информацией о написании сценариев.
Для генерации фазза генетическим алгоритмом и автоматического обнаружения ошибок необходимо установить библиотеку-трейсер shfz/shfz-flask в веб-приложение.
В настоящее время библиотека-трейсер совместима только с Python Flask. (в будущем поддержка фреймворков будет расширена)
см. Сервер
см. Запуск
см. Результат
Для агрегации результатов фаззинга или генерации фазза с помощью генетического алгоритма необходимо запустить сервер.
$ shfz server
По умолчанию HTTP-сервер запускается на порту 53653 на локальном хосте.
Этот сервер взаимодействует со сценарием и трейсером для сбора данных о фаззе и графе вызовов, а также поддерживает генерацию фазза с помощью генетических алгоритмов.
После запуска сервера укажите файл сценария в другом терминале и выполните фаззинг.
$ shfz run -f scenario.js -n 100 -p 3 -t 30
[+] Finish
Параметры
-f,--fileфайл сценария (обязательно)-n,--numberобщее количество выполнений (по умолчанию 1)-p,--parallelколичество параллельных выполнений (по умолчанию 1)-t,--timeoutтаймаут выполнения сценария (секунд) (по умолчанию 30)
Вы можете получить результат, отправив запрос к эндпоинту /data сервера во время или после фаззинга.
$ curl -s http://localhost:53653/data | jq
{
"status": [
{
"name": "login",
"UsedFuzzs": [
{
"id": "0000",
"fuzz": [
{
"name": "user",
"text": "abcabc"
}
],
...
Вы также можете установить shfz на локальную машину и запускать фаззинг, но мы рекомендуем запускать shfz на CI.
См. demo-webapp и его workflow фаззинга
/fuzz.https://github.com/shfz/demo-webapp/tree/main/fuzz
- uses: actions/setup-node@v2
with:
node-version: "16"
- name: настройка сценария фаззинга
run: |
cd fuzz
npm i
./node_modules/typescript/bin/tsc scenario.ts
file scenario.js
- name: настройка веб-приложения
run: |
docker-compose build
docker-compose up -d
docker-compose ps -a
Если это веб-приложение создано на Python Flask, установите shfz/shfz-flask
Примечание.
Если вы используете docker-compose для запуска веб-приложения на Linux, необходимо включить host.docker.internal.
extra_hosts: - "host.docker.internal:host-gateway"И shfztrace инициализируется с
fuzzUrl="http://host.docker.internal:53653"from flask import * from shfzflask import shfztrace app = Flask(__name__) shfztrace(app, fuzzUrl="http://host.docker.internal:53653")
используйте shfz-actions-setup
- name: Установка SHFZ
uses: shfz/[email protected]
with:
version: "0.0.3"
- name: запуск фаззинга
run: shfz run -f fuzz/scenario.js -n 100
используйте shfz-actions-setup
- name: Отчёт SHFZ
uses: shfz/[email protected]
with:
path: "/app"
- name: экспорт лога приложения
run: docker logs demo-webapp_app_1 > app.log
- name: выгрузка артефакта
uses: actions/upload-artifact@v2
with:
name: app.log
path: ./app.log
изображение: Flaticon.com