
Обход 4xx HTTP response status codes и другое. Инструмент основан на Python Requests, PycURL и HTTP Client.
Обход кодов состояния HTTP 4xx и не только.
Инструмент основан на Python Requests, PycURL и HTTP Client.
Протестировано на Kali Linux v2024.2 (64-bit).
Сделано в образовательных целях. Надеюсь, это поможет!
Планы на будущее:
silent для подавления вывода в консоль.no color для отключения цветного вывода в консоль.User-Agent.В Kali Linux это должно работать без проблем; в противном случае выполните:
apt-get -y install libcurl4-gnutls-dev librtmp-dev
pip3 install --upgrade pycurl
PycURL на Windows не поддерживается.
На macOS выполните:
brew uninstall curl
brew uninstall openssl
brew install curl
brew install openssl
echo 'export PATH="/opt/homebrew/opt/curl/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
export LDFLAGS="-L/opt/homebrew/opt/curl/lib"
export CPPFLAGS="-I/opt/homebrew/opt/curl/include"
export PYCURL_SSL_LIBRARY=openssl
pip3 install --no-cache-dir --compile --ignore-installed --config-setting="--with-openssl=" --config-setting="--openssl-dir=/opt/homebrew/opt/openssl@3" pycurl
Также можно установить через Homebrew (не поддерживается мной):
brew install forbidden
pip3 install --upgrade forbidden
git clone https://github.com/ivan-sincek/forbidden && cd forbidden
python3 -m pip install --upgrade build
python3 -m build
python3 -m pip install dist/forbidden-13.4-py3-none-any.whl
Обход кода состояния HTTP 403 Forbidden:
forbidden -u https://example.com/admin -t protocols,methods,uploads,overrides,headers,paths-ram,encodings -f GET -l initial,path -o forbidden_403_results.json
Обход кода состояния HTTP 403 Forbidden с нагрузочным тестированием:
mkdir stresser_403_results
stresser -u https://example.com/admin -r 1000 -th 200 -f GET -l initial -dir stresser_403_results -o stresser_403_results.json
Обход кода состояния HTTP 401 Unauthorized:
forbidden -u https://example.com/admin -t auths -f GET -l initial -o forbidden_401_results.json
Тест на открытые редиректы и сломанные парсеры URL, т.е. проверка out-of-band (OOB) взаимодействий:
forbidden -u https://example.com/admin -t redirects,parsers -f GET -l initial -e xyz.interact.sh -o forbidden_oob_results.json
protocols
Host HTTP-запроса, с использованием IP-адреса и доменного имени.methods
Content-Length: 0.uploads
overrides
Host.headers
values
paths
encodings
auths
redirects
parsers
Если вас интересуют дополнительные детали, смотрите:
Замечания:
уникальный фильтр.Forbidden, и Stresser используют движок Python Requests.Host привязан к движку HTTP Client. Кроме того, указанная команда cURL не будет работать корректно, потому что cURL не позволяет удалить заголовок Host.Host привязан к движку Python Requests. Кроме того, указанная команда cURL не будет работать корректно, потому что cURL не позволяет использовать два заголовка Host.PycURL.нормализовывать URL (например, при тестировании encodings), изменять HTTP-запросы или полностью отбрасывать их.User-Agent.ограничения частоты запросов и других подобных антибот-защит; делайте паузу перед повторным запуском инструмента на том же домене.Это лишь краткий обзор того, что используется, но не того, как используется.
ACL
ARBITRARY
BASELINE-CONTROL
BIND
CHECKIN
CHECKOUT
CONNECT
COPY
DELETE
GET
HEAD
INDEX
LABEL
LINK
LOCK
MERGE
MKACTIVITY
MKCALENDAR
MKCOL
MKREDIRECTREF
MKWORKSPACE
MOVE
OPTIONS
ORDERPATCH
PATCH
POST
PRI
PROPFIND
PROPPATCH
PUT
REBIND
REPORT
SEARCH
SHOWMETHOD
SPACEJUMP
TEXTSEARCH
TRACE
TRACK
UNBIND
UNCHECKOUT
UNLINK
UNLOCK
UPDATE
UPDATEREDIRECTREF
VERSION-CONTROL
Это лишь краткий обзор того, что используется, но не того, как используется.
19-Profile
Accept
Base-URL
CF-Connecting-IP
Client-IP
Cluster-Client-IP
Destination
Forwarded-For
Forwarded-For-IP
From
Front-End-HTTPS
Host
Incap-Client-IP
Origin
Profile
Proxy
Proxy-Client-IP
Redirect
Referer
Remote-Addr
Request-URI
True-Client-IP
URI
URL
WAP-Profile
WL-Proxy-Client-IP
X-Client-IP
X-Cluster-Client-IP
X-Forward
X-Forward-For
X-Forwarded
X-Forwarded-By
X-Forwarded-For
X-Forwarded-For-IP
X-Forwarded-For-Original
X-Forwarded-Host
X-Forwarded-Path
X-Forwarded-Port
X-Forwarded-Proto
X-Forwarded-Protocol
X-Forwarded-SSL
X-Forwarded-Scheme
X-Forwarded-Server
X-HTTP-DestinationURL
X-HTTP-Host-Override
X-HTTP-Method
X-HTTP-Method-Override
X-Host
X-Host-Override
X-Method
X-Method-Override
X-Original-Forwarded-For
X-Original-Remote-Addr
X-Original-URL
X-Originally-Forwarded-For
X-Originating-IP
X-Override-URL
X-Proxy-Host
X-Proxy-URL
X-ProxyUser-IP
X-Real-IP
X-Referer
X-Remote-Addr
X-Remote-IP
X-Rewrite-URL
X-Scheme
X-Server-IP
X-True-Client-IP
X-True-IP
X-URL-Scheme
X-Wap-Profile
Замечания:
по возрастанию, длине тела ответа HTTP по убыванию и ID теста по возрастанию.2xx и 3xx.length в результатах указывает на длину тела HTTP-ответа.ложноположительные результаты, для каждой уникальной длины содержимого HTTP-ответа выполните указанную команду cURL и проверьте, приводит ли HTTP-ответ к обходу; если нет, просто игнорируйте все результаты с той же длиной содержимого.[
{
"id":"595-HOST-OVERRIDES-1",
"url":"https://example.com:443/admin",
"method":"GET",
"headers":[
"Host: 127.0.0.1"
],
"cookies":[],
"body":"",
"user_agent":"Forbidden/13.4",
"command":"curl --path-as-is -iskL -A 'Forbidden/13.4' -H 'Host: 127.0.0.1' -X 'GET' 'https://example.com:443/admin'",
"status":200,
"length":14301
},
{
"id":"596-HOST-OVERRIDES-1",
"url":"https://example.com:443/admin",
"method":"GET",
"headers":[
"Host: 127.0.0.1:443"
],
"cookies":[],
"body":"",
"user_agent":"Forbidden/13.4",
"command":"curl --path-as-is -iskL -A 'Forbidden/13.4' -H 'Host: 127.0.0.1:443' -X 'GET' 'https://example.com:443/admin'",
"status":200,
"length":14301
}
]
Forbidden v13.4 ( github.com/ivan-sincek/forbidden )
Usage: forbidden -u url -t tests [-f force] [-o out ]
Example: forbidden -u https://example.com/admin -t all [-f GET ] [-o results.json]
ОПИСАНИЕ
Обход кодов состояния HTTP 4xx и не только
URL
Недоступный URL
-u, --url = https://example.com/admin | и т.д.
ИГНОРИРОВАТЬ ПАРАМЕТРЫ
Игнорировать строку запроса и фрагмент URL
-ip, --ignore-parameters
ИГНОРИРОВАТЬ ЗАПРОСЫ
Там, где применимо, использовать PycURL вместо стандартного движка Python Requests
-ir, --ignore-requests
ТЕСТЫ
Тесты для запуска
Укажите '[ip-|host-|url-]values', чтобы тестировать заголовки HTTP-запроса, используя только переданные пользователем значения через опцию '-v'
Укажите 'paths-ram' для атаки battering ram или 'paths' для стандартной атаки cluster bomb
Используйте значения, разделённые запятыми
-t, --tests = protocols | methods | uploads | [method-|scheme-|port-|host-|path-]overrides | headers | [ip-|host-|url-]values | paths[-ram] | encodings | [basic-|bearer-]auths | redirects | parsers | all
ЗНАЧЕНИЯ
Файл, содержащий значения заголовков HTTP-запроса, или одно значение, например, внутренний IP и т.д.
Тесты: all-values
-v, --values = values.txt | 10.10.15.20 | example.local | https://example.local | и т.д.
ПРИНУДИТЕЛЬНЫЙ МЕТОД
Принудительно задать HTTP-метод для всех неспецифических тестов
-f, --force = GET | POST | CUSTOM | и т.д.
ПУТЬ
Доступный путь URL для тестирования переопределения пути URL
Тесты: path-overrides
По умолчанию: /robots.txt, /index.html, /sitemap.xml, /README.txt
-p, --path = /home | и т.д.
ВРЕДОНОСНЫЙ URL
Вредоносный URL или collaborator сервис
Тесты: host-overrides, headers, bearer-auths, redirects, parsers
По умолчанию: https://github.com
-e, --evil = https://xyz.interact.sh | https://xyz.burpcollaborator.net | и т.д.
ЗАГОЛОВОК
Любое количество дополнительных заголовков HTTP-запроса
Дополнительные заголовки не будут переопределять заголовки, специфичные для теста
Точка с запятой в, например, 'Content-Type;' расширится до пустого заголовка HTTP-запроса
-H, --header = "Authorization: Bearer ey..." | Content-Type; | и т.д.
КУКИ
Любое количество дополнительных HTTP-кук
Дополнительные куки не будут переопределять куки, специфичные для теста
-b, --cookie = PHPSESSIONID=3301 | и т.д.
ИГНОРИРОВАТЬ
RegEx для фильтрации ложноположительных результатов с кодом 200 OK
-i, --ignore = Inaccessible | "Access Denied" | "Error: .+" | и т.д.
ДЛИНЫ СОДЕРЖИМОГО
Длины содержимого HTTP-ответа для фильтрации ложноположительных результатов с кодом 200 OK
Укажите 'initial', чтобы игнорировать длину содержимого начального HTTP-ответа
Укажите 'path', чтобы игнорировать длину содержимого ответа доступного URL
Используйте значения, разделённые запятыми
-l, --content-lengths = 12 | initial | path | и т.д.
ТАЙМАУТ ЗАПРОСА
Таймаут запроса в секундах
По умолчанию: 60
-rt, --request-timeout = 30 | 90 | и т.д.
ПОТОКИ
Количество параллельных потоков
По умолчанию: 5
-th, --threads = 20 | и т.д.
ЗАДЕРЖКА
Задержка в миллисекундах перед отправкой HTTP-запроса
Предназначено для однопоточного использования
-s, --sleep = 500 | и т.д.
USER AGENT
Используемый user agent
По умолчанию: Forbidden/13.4
-a, --user-agent = random[-all] | curl/3.30.1 | и т.д.
ПРОКСИ
Используемый веб-прокси
-x, --proxy = http://127.0.0.1:8080 | и т.д.
КОДЫ СОСТОЯНИЯ HTTP
Включать в результаты только определённые коды состояния HTTP
По умолчанию: 2xx, 3xx
Используйте значения, разделённые запятыми
-sc, --status-codes = 1xx | 2xx | 3xx | 4xx | 5xx | all
ТАБЛИЦА
Отображать результаты в виде таблицы вместо JSON
Предназначено для широких экранов
-st, --show-table
ВЫВОД
Выходной файл
-o, --out = results.json | и т.д.
ДАМП
Выгрузить все записи тестов в выходной файл без выполнения
-dmp, --dump
ОТЛАДКА
Включить отладочный вывод
-dbg, --debug
Stresser v13.4 ( github.com/ivan-sincek/forbidden )
Usage: stresser -u url -r repeat -th threads -dir directory [-f force] [-o out ]
Example: stresser -u https://example.com/admin -r 1000 -th 200 -dir results [-f GET ] [-o results.json]
ОПИСАНИЕ
Обход кодов состояния HTTP 4xx с нагрузочным тестированием
URL
Недоступный URL
-u, --url = https://example.com/admin | и т.д.
ИГНОРИРОВАТЬ ПАРАМЕТРЫ
Игнорировать строку запроса и фрагмент URL
-ip, --ignore-parameters
ИГНОРИРОВАТЬ ЗАПРОСЫ
Там, где применимо, использовать PycURL вместо стандартного движка Python Requests
-ir, --ignore-requests
ПРИНУДИТЕЛЬНЫЙ МЕТОД
Принудительно задать HTTP-метод для всех неспецифических тестов
-f, --force = GET | POST | CUSTOM | и т.д.
ЗАГОЛОВОК
Любое количество дополнительных заголовков HTTP-запроса
Дополнительные заголовки не будут переопределять заголовки, специфичные для теста
Точка с запятой в, например, 'Content-Type;' расширится до пустого заголовка HTTP-запроса
-H, --header = "Authorization: Bearer ey..." | Content-Type; | и т.д.
КУКИ
Любое количество дополнительных HTTP-кук
Дополнительные куки не будут переопределять куки, специфичные для теста
-b, --cookie = PHPSESSIONID=3301 | и т.д.
ИГНОРИРОВАТЬ
RegEx для фильтрации ложноположительных результатов с кодом 200 OK
-i, --ignore = Inaccessible | "Access Denied" | "Error: .+" | и т.д.
ДЛИНЫ СОДЕРЖИМОГО
Длины содержимого HTTP-ответа для фильтрации ложноположительных результатов с кодом 200 OK
Укажите 'initial', чтобы игнорировать длину содержимого начального HTTP-ответа
Используйте значения, разделённые запятыми
-l, --content-lengths = 12 | initial | и т.д.
ТАЙМАУТ ЗАПРОСА
Таймаут запроса в секундах
По умолчанию: 60
-rt, --request-timeout = 30 | 90 | и т.д.
ПОВТОР
Количество HTTP-запросов на один тест
-r, --repeat = 1000 | и т.д.
ПОТОКИ
Количество параллельных потоков
-th, --threads = 20 | и т.д.
USER AGENT
Используемый user agent
По умолчанию: Stresser/13.4
-a, --user-agent = random[-all] | curl/3.30.1 | и т.д.
ПРОКСИ
Используемый веб-прокси
-x, --proxy = http://127.0.0.1:8080 | и т.д.
КОДЫ СОСТОЯНИЯ HTTP
Включать в результаты только определённые коды состояния HTTP
По умолчанию: 2xx, 3xx
Используйте значения, разделённые запятыми
-sc, --status-codes = 1xx | 2xx | 3xx | 4xx | 5xx | all
ТАБЛИЦА
Отображать результаты в виде таблицы вместо JSON
Предназначено для широких экранов
-st, --show-table
ВЫВОД
Выходной файл
-o, --out = results.json | и т.д.
ДИРЕКТОРИЯ
Выходная директория
Все валидные и уникальные HTTP-ответы будут сохранены в этой директории
-dir, --directory = results | и т.д.
ДАМП
Выгрузить все записи тестов в выходной файл без выполнения
-dmp, --dump
ОТЛАДКА
Включить отладочный вывод
-dbg, --debug

Рисунок 1 — Реальный пример

Рисунок 2 — Простой пример

Рисунок 3 — Простой пример (вывод в виде таблицы)