Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
forbidden — Обход 4xx HTTP response status codes и другое. Инструмент основан на Python Requests, PycURL и HTTP Client. | Kitploit
Инструменты/GitHubGitHub/ivan-sincek/forbidden
Сканеры уязвимостейОбход IDS/IPSЭксплуатация веб-приложенийСбор информацииОбход WAFВеб-безопасностьФаззингТестирование на Проникновение
GitHubivan-sincek/forbidden

forbidden

Обход 4xx HTTP response status codes и другое. Инструмент основан на Python Requests, PycURL и HTTP Client.

Репозиторий
25748961 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
# Forbidden

Обход кодов состояния HTTP 4xx и не только.

Инструмент основан на `Python Requests`, `PycURL` и `HTTP Client`.

Протестировано на Kali Linux v2024.2 (64-bit).

Сделано в образовательных целях. Надеюсь, это поможет!

**Планы на будущее:**

* Добавить опцию `silent` для подавления вывода в консоль.
* Добавить опцию `no color` для отключения цветного вывода в консоль.
* Добавить тесты для «hop-by-hop» заголовков HTTP-запросов.
* Добавить тесты для заголовка HTTP-запроса `User-Agent`.
* Добавить тесты для HTTP-куки.
* Добавить тесты для HTTP-смаглинга.
* Добавить тесты для CRLF.
* Добавить тесты для Log4j.
* Добавить тесты для AWS metadata SSRF.

## Содержание

* [How to Install](#how-to-install)
    * [Install PycURL](#install-pycurl)
    * [Standard Install](#standard-install)
    * [Build and Install From the Source](#build-and-install-from-the-source)
* [How to Use](#how-to-use)
* [Tests](#tests)
    * [HTTP Methods](#http-methods)
    * [HTTP Request Headers](#http-request-headers)
* [Results](#results)
* [Usage](#usage)
* [Images](#images)

## Установка

### Установка PycURL

В Kali Linux это должно работать без проблем; в противном случае выполните:

```bash
apt-get -y install libcurl4-gnutls-dev librtmp-dev

pip3 install --upgrade pycurl
```

---

PycURL на Windows не поддерживается.

---

На macOS выполните:

```bash
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](https://formulae.brew.sh/formula/forbidden) (не поддерживается мной):

```fundamental
brew install forbidden
```

### Стандартная установка

```bash
pip3 install --upgrade forbidden
```

### Сборка и установка из исходников

```bash
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`:

```fundamental
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` с нагрузочным тестированием:

```fundamental
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`:

```fundamental
forbidden -u https://example.com/admin -t auths -f GET -l initial -o forbidden_401_results.json
```

Тест на открытые редиректы и сломанные парсеры URL, т.е. проверка out-of-band (OOB) взаимодействий:

```fundamental
forbidden -u https://example.com/admin -t redirects,parsers -f GET -l initial -e xyz.interact.sh -o forbidden_oob_results.json
```

## Тесты

**`protocols`**

* Проверка протоколов HTTP и HTTPS с использованием IP-адреса и доменного имени.
* Проверка понижения протокола до HTTP/1.0 без заголовка `Host` HTTP-запроса, с использованием IP-адреса и доменного имени.

**`methods`**

* Проверка разрешённых HTTP-методов, также с использованием заголовка `Content-Length: 0`.
* Проверка Cross-Site Tracing (XST) с помощью методов TRACE и TRACK.

**`uploads`**

* Проверка рекурсивной загрузки текстового файла для каждой директории в пути URL методом PUT.

**`overrides`**

* Проверка переопределения HTTP-метода через параметры строки запроса URL, заголовки HTTP-запроса и тело запроса.
* Проверка переопределения схемы URL через заголовки HTTP-запроса (с HTTPS на HTTP и с HTTP на HTTPS).
* Проверка переопределения порта через заголовки HTTP-запроса.
* Проверка переопределения хоста HTTP через заголовки HTTP-запроса, а также с использованием двух заголовков `Host`.
* Проверка переопределения пути URL через заголовки HTTP-запроса с относительными путями URL, используя следующие URL: доступный URL, корневой URL и полный URL.

**`headers`**

* Проверка заголовков HTTP-запроса с IP-адресами, разделёнными запятыми IP-адресами, доменными именами, корневыми URL, полными URL и т.д.

**`values`**

* Проверка заголовков HTTP-запроса с IP-адресами, доменными именами, корневыми URL и полными URL, переданными пользователем.

**`paths`**

* Проверка обхода путей URL.

**`encodings`**

* Проверка преобразований и кодировок хоста и пути URL.

**`auths`**

* Проверка базовой аутентификации/авторизации через заголовки HTTP-запроса с пустыми значениями и предопределёнными Base64-закодированными учётными данными.
* Проверка Bearer-аутентификации/авторизации через заголовки HTTP-запроса с пустыми значениями, некорректными JWT и предопределёнными JWT.

**`redirects`**

* Проверка открытых редиректов через заголовки HTTP-запроса с IP-адресами, доменными именами, корневыми URL и полными URL для перенаправления.

**`parsers`**

* Проверка сломанных парсеров URL через заголовки HTTP-запроса с некорректными IP-адресами, доменными именами, корневыми URL и полными URL.

---

Если вас интересуют дополнительные детали, смотрите:

* [/src/forbidden/utils/forbidden.py](https://github.com/ivan-sincek/forbidden/blob/main/src/forbidden/utils/forbidden.py#L601)
* [/src/forbidden/utils/test.py](https://github.com/ivan-sincek/forbidden/blob/main/src/forbidden/utils/test.py)
* [/src/forbidden/utils/value.py](https://github.com/ivan-sincek/forbidden/blob/main/src/forbidden/utils/value.py)

---

**Замечания:**

* Все тесты основаны на публичных отчётах infosec и bug bounty.
* Некоторые тесты пересекаются; однако перед отправкой применяется `уникальный фильтр`.
* Все заголовки HTTP-запроса, параметры строки запроса URL и т.д. были проверены в соответствии с официальной документацией.
* По умолчанию и `Forbidden`, и `Stresser` используют движок `Python Requests`.
* Тест понижения протокола до HTTP/1.0 без заголовка `Host` привязан к движку `HTTP Client`. Кроме того, указанная команда cURL не будет работать корректно, потому что cURL не позволяет удалить заголовок `Host`.
* Тест переопределения хоста HTTP с двумя заголовками `Host` привязан к движку `Python Requests`. Кроме того, указанная команда cURL не будет работать корректно, потому что cURL не позволяет использовать два заголовка `Host`.
* Тест преобразований и кодировок хоста и пути URL привязан к движку `PycURL`.
* Некоторые веб-прокси могут `нормализовывать` URL (например, при тестировании `encodings`), изменять HTTP-запросы или полностью отбрасывать их.
* Некоторые сайты могут требовать валидный или очень специфический заголовок `User-Agent`.
* Cross-Site Tracing (XST) больше не считается уязвимостью.
* Остерегайтесь `ограничения частоты запросов` и других подобных антибот-защит; делайте паузу перед повторным запуском инструмента на том же домене.

### HTTP-методы

_Это лишь краткий обзор того, что используется, но не того, как используется._

```fundamental
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
```

### Заголовки HTTP-запросов

_Это лишь краткий обзор того, что используется, но не того, как используется._

```fundamental
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 `по возрастанию`, длине тела ответа HTTP `по убыванию` и ID теста `по возрастанию`.
* По умолчанию в результаты и вывод консоли включаются только коды состояния HTTP `2xx` и `3xx`.
* Атрибут `length` в результатах указывает на длину тела HTTP-ответа.
* Чтобы вручную отфильтровать `ложноположительные` результаты, для каждой уникальной длины содержимого HTTP-ответа выполните указанную команду cURL и проверьте, приводит ли HTTP-ответ к обходу; если нет, просто игнорируйте все результаты с той же длиной содержимого.

```json
[
   {
      "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
   }
]
```

## Использование

```fundamental
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
```

```fundamental
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
```

## Изображения

<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/4920/79066f51066e4f83e1a6a180069eb9bd213a16775d3906d7256a0262c040ddc4.png" alt="Real Example"></p>

<p align="center">Рисунок 1 — Реальный пример</p>

<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/4920/c0ab26b4413f9b7014f21da8a4b458ba7385baf3198a80db1a9e4303ec123d30.png" alt="Simple Example"></p>

<p align="center">Рисунок 2 — Простой пример</p>

<p align="center"><img src="https://assets.kitploit.com/production/public/readmes/4920/c015d3d41d2f6f56a71e2af5a38bd539942a5f24cbbe712381bb2221cc2593ae.png" alt="Simple Example (Table Output)"></p>

<p align="center">Рисунок 3 — Простой пример (вывод в виде таблицы)</p>
Скачать инструмент