> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ru/web/authentication/broken-2fa-logic.md).

# Нарушенная логика 2FA

Заметки по лабораторным работам PortSwigger Web Security Academy о нарушенной логике 2FA, включая рабочий процесс эксплуатации, тестирование полезной нагрузки, проверку в Burp Suite и контекст устранения уязвимости.

### Нарушенная логика 2FA

Приложение реализует двухфакторную аутентификацию: / После логина/пароля, **код 2FA** отправляется по **электронная почта**. / У нас есть:

* Наши учетные данные: `wiener:peter`
* Имя пользователя жертвы: `carlos`

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-39d8162c29a0f670cd135b7caaa8e257d0564568%2F%7BEADD372C-6B83-488A-A6BF-33E63F7E8275%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

Доступ к **почтовый сервер** для получения кодов 2FA

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b7096d751d9122f8a5a76bfa0f921e20bdccce7d%2Fimage%20(247).png?alt=media" alt=""><figcaption></figcaption></figure>

#### Наблюдаемая работа

1. После первого шага входа приложение отправляет код 2FA по электронной почте.
2. Второй шаг (`/login2`) проверяет этот код.
3. Пользователь, для которого действует 2FA, определяется через **`verify`** cookie.

Пример запроса ко второму шагу:

```http
GET /login2 HTTP/2
Host: 0a7500ab0376700f81a18e2c00f200a8.web-security-academy.net
Cookie: session=cNFHPofUz1wxXQpsZZN7yIiKQklG1Ygd; verify=carlos
```

Здесь мы принудительно задаем `verify` cookie `carlos` так, чтобы проверка 2FA выполнялась для учетной записи жертвы.

#### Подбор кода 2FA методом перебора

1. Запрос проверки 2FA отправляется на **Intruder** (или эквивалент) путем нацеливания на запрос, содержащий:

```bash
mfa-code=XXXXX
```

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-320e6c232a2b39126c4ae2ae10d5361beec9e936%2F%7B9AC3C534-94B3-419B-9333-3E1B1CDBE72D%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

* Эта **payload** настроена на проверку всех возможных комбинаций кода, от `0000` на `9999` (то есть 10 000 значений).

Мы используем cookie:

```bash
verify=carlos
```

* чтобы все проверки кода выполнялись для учетной записи **carlos**.

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-85ae02b3d9733ac0cc034488646cd927c7fe9897%2F%7B74BA9A5C-1D63-4A53-933F-98E8280A06FF%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

* В настройках к ответу добавляется \*\*условие фильтра\*\*, чтобы игнорировать те, которые содержат сообщение:
* `Неверный код безопасности`

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a33181992fde2f30e4b1ed6b81e78e26a9ed2f4d%2F%7B8FB4058E-CA1B-4381-919C-D636554A5B71%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

1. Мы запускаем атаку грубым перебором.
2. Среди ответов мы находим тот, который больше не содержит сообщение об ошибке и возвращает \*\*HTTP-код 302\*\* (перенаправление). / → Этот ответ соответствует **верному коду 2FA** от имени **carlos**.

<figure><img src="https://4248209978-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-a5c81b03c3b04a6501d692246922aab5cf19fe5c%2F%7BE0F88A65-57C7-47C7-B14C-78FEB9C9801C%7D.png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/ru/web/authentication/broken-2fa-logic.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
