
Быстрый сканер для обнаружения HTTP-атак типа downgrade smuggling, написанный на Go.
SmuggleFuzz — настраиваемый и быстрый сканер для поиска уязвимостей типа HTTP downgrade smuggling. Благодаря возможности настройки списков гаджетов он позволяет глубже понять причины неудачных атак с использованием smuggling. Я уверен, что множество уязвимостей, основанных на HTTP downgrade smuggling, остаются необнаруженными. К сожалению, многие прекращают исследование после поверхностного сканирования. Используя SmuggleFuzz, вы сможете находить уязвимости smuggling, которые другие упускают.
Дополнительная информация: https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Скачайте копию со страницы релизов: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Другой способ:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
У SmuggleFuzz три команды:
Usage:
smugglefuzz scan [flags]
Examples:
smugglefuzz scan -u https://example.com/ --confirm
smugglefuzz scan -u https://example.com/ --filter TIMEOUT --confirm
smugglefuzz scan -u https://example.com/ -w wordlist.txt -t 10 --confirm --filter TIMEOUT
smugglefuzz scan --dc -u https://example.com/ -w wordlist.txt -x PUT --confirm
//Multiple targets? just use -f instead of -u and provide a file with the targets in it:
smugglefuzz scan -f multiple_targets.txt --confirm -t 10
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt --confirm -s ./save-success.txt --filter TIMEOUT
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt -H "Cookie: date=...; session=...;" -s ./save-success.txt -x PUT --filter TIMEOUT
Flags:
-c, --confirm Enable this flag to send a confirmation to the target when a timeout is encountered. Helps confirm if the target is vulnerable.
-d, --data string HTTP/2 Data frame to send. eg: 99\r\n (default "99\r\n")
--dc Disable colour in the output. This is useful when you want to save the output to a file.
-f, --file string A file containing multiple targets in url format. One target per line.
--filter string Filter responses by string or frame type, etc. For example: 405, 200, 502, TIMEOUT, RST, GOAWAY, etc.
-H, --header string Insert a custom header. It should be provided in the regular header format: "Cookie: date=...; session=...;"
-h, --help help for scan
-i, --interval int The timeout interval in seconds. (default 5)
-x, --method string The HTTP request method to be used. (default "POST")
-s, --save-success string If a request is confirmed to be successful (via the --confirm flag), it will be saved to a file. This is useful when dealing with lots of targets.
-t, --threads int The number of threads to run. Smugglefuzz can go fast, so set the desired number. However, too many may upset any WAFs. (default 4)
-u, --url string The target URL to be scanned.
-w, --wordlist string Provide a custom list of gadgets to use. If not provided, the default list will be used.
Usage:
smugglefuzz request [flags]
Examples:
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13"
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -x PUT
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -H "Cookie: date=...; session=...;" --data "223\r\n"
Flags:
-a, --attack string Attack Header, separated by (; ) like the wordlist in 'scan' mode.
-d, --data string HTTP/2 Data frame content to send. (default "99\r\n")
--dc Disable colour in the output.
-H, --header string Insert custom header. eg "Cookie: values"
-h, --help help for request
-i, --interval int Detection timeout interval in seconds. (default 5)
-x, --method string The method to use. (default "POST")
-u, --url string The target URL to submit the request to.
Эта команда просто выводит список стандартных гаджетов smuggle. Встроенное подтверждение пока работает только для H2.CL и H2.TE. Однако по-прежнему можно обнаруживать атаки H2.0 через тайм-ауты (–filter TIMEOUT) или OAST на вашем домене. (См. раздел о псевдозаголовках ниже)
SmuggleFuzz предоставляет пользователям полный контроль над запросами с помощью пользовательских списков слов. Эти списки имеют базовую структуру, которую следует соблюдать для оптимальной обработки запросов. Например, заголовки и их значения разделяются с помощью точки с запятой и пробела (; ) вместо обычного двоеточия, что упрощает включение значений с двоеточием в smuggling-запросы. Это также открывает возможности для различных мутаций и творческих подходов. Подробное руководство по созданию собственных полезных нагрузок можно найти в: исследовании HTTP/2 Джеймса Кеттла.
Инструмент включает готовый к использованию список из 125 smuggling-гаджетов, однако всегда есть место для расширения. Эти гаджеты можно просмотреть с помощью команды 'output', что даёт представление о структуре запросов. Пользователи могут запускать сканирование с пользовательскими списками слов, используя флаг 'w'. Список поддерживает URL-кодирование (%00) для непечатаемых байтовых значений, таких как возврат каретки и перевод строки, представленных как '%0d%0a' или '\r\n'. Хотя предоставленный список является исчерпывающим, создание собственных гаджетов может значительно повысить вероятность успеха.
Нужна поддержка h2c? Ознакомьтесь с веткой "experimental-h2c" в SmuggleFuzz.
Псевдозаголовки полностью поддерживаются и могут быть настроены с помощью синтаксиса ":name":
:authority:scheme:methodЭти заголовки особенно полезны при тестировании векторов атак H2.0. Например, при тестировании H2.0 smuggling с использованием методов на основе OAST могут быть эффективны следующие записи в списке слов:
Начиная с v0.1.8 [HOSTNAME] может использоваться в качестве заполнителя. SmuggleFuzz заменит его на имя хоста во время выполнения.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20или
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20Метод обнаружения, используемый в SmuggleFuzz, аналогичен тому, который применяли Albinowax в своих исследованиях HTTP/1 smuggling и defparam в инструменте Smuggler, но адаптирован для HTTP/2. К счастью, поскольку эти атаки связаны с понижением версии (downgrade), для обнаружения H2.CL и H2.TE можно использовать одну и ту же полезную нагрузку (тело запроса/DATA).
Важное правило для списков слов: для подтверждающей атаки успешно протащенные заголовки должны содержать следующие значения:
CL: 13
TE: chunked
Каждый запрос включает "Body"/DATA-фрейм со значением "99\r\n". Если протащен заголовок TE, он интерпретируется сервером как chunked длина содержимого 153 (0x99) (если протащить удалось), что приводит к тайм-ауту. Аналогично, протаскивание заголовка CL с длиной содержимого 13 также приводит к тайм-ауту из-за невыполненной длины.
Подтверждающий запрос повторяет тот же запрос, который привёл к тайм-ауту, но с Data: "3\r\nABC\r\n0\r\n\r\n". Это удовлетворяет как chunked TE, так и CL=13, вызывая успешный ответ и потенциально указывая на уязвимость smuggling.