---
url: https://docs.ogmabox.com/ru/app/utilities/race-smuggling.md
description: Проверяйте состояния гонки и контрабанду HTTP-запросов утилитами Ogma.
---

# Состояния гонки и контрабанда запросов {#race-and-smuggling}

Race / Smuggling предоставляет два специализированных инструмента для атак на HTTP, зависящих от времени и особенностей протокола.

## Состояния гонки {#race-conditions}

Вкладка Race одновременно отправляет несколько копий запроса одной конечной точке и позволяет сравнить ответы и время параллельных выполнений.

### Когда использовать {#when-to-use-it}

* **TOCTOU (time-of-check/time-of-use)** — проверьте, можно ли разделить проверку и изменение состояния параллельными запросами.
* **Манипуляции с учётной записью** — отправляйте параллельные изменения баланса, погашения купонов или ограниченные операции для проверки двойного расходования или превышения числа использований.
* **Обход ограничений голосования или частоты** — проверьте атомарность ограничений на пользователя.

### Запуск теста гонки {#running-a-race-test}

1. Создайте или передайте целевой запрос во вкладку Race.
2. Задайте **параллельность** — число одновременных копий.
3. Нажмите **Отправить гонку**. Копии отправляются максимально одновременно.
4. Изучите таблицу ответов: статус, тело и время каждой копии.
5. Различия (разные статусы, тела, неожиданный успех второй и последующих копий) указывают на окно гонки.

### Гонка одним пакетом HTTP/2 {#http-2-single-packet-racing}

Если цель поддерживает HTTP/2, включите **Режим HTTP/2**. Он мультиплексирует все параллельные запросы в одном соединении, устраняя сетевой джиттер и повышая надёжность одновременного поступления на сервер.

## Контрабанда HTTP-запросов {#http-request-smuggling}

Вкладка Smuggling проверяет обработку неоднозначных заголовков `Content-Length` и `Transfer-Encoding` для обнаружения рассинхронизации внешнего и внутреннего серверов.

### Основы {#background}

Если обратный прокси и сервер приложения по-разному определяют конец одного запроса и начало следующего, скрытый префикс запроса A может добавиться к запросу B. Последствия варьируются от отравления кеша до обхода аутентификации и внедрения произвольных запросов.

### Варианты рассинхронизации {#desync-variants}

| Вариант | Описание |
|---|---|
| CL.TE | Внешний сервер использует Content-Length, внутренний — Transfer-Encoding |
| TE.CL | Внешний сервер использует Transfer-Encoding, внутренний — Content-Length |
| TE.TE | Оба используют Transfer-Encoding, но по-разному обрабатывают замаскированный заголовок |

### Запуск пробы контрабанды {#running-a-smuggling-probe}

1. Выберите конечную точку во вкладке Smuggling.
2. Выберите вариант рассинхронизации.
3. Нажмите **Отправить пробу**. Инструмент отправит специально сформированный запрос и измерит ответ.
4. Тайм-аут или неожиданный ответ на второй запрос последовательности указывает на возможную рассинхронизацию.
5. Подтвердите вручную перед созданием результата: сетевые тайм-ауты, не связанные с пробой, дают ложные срабатывания.

## Связанные страницы {#related-pages}

* [Повторная отправка](../replay.md)
* [Перехват](../intercept.md)
* [Находки](../findings.md)
