«Пользовательский ввод» - это те значения или действия, для которых необходимо взаимодействие с пользователем, такое как ввод любого значения с клавиатуры, щелчок по кнопке и, наконец, отправка этих значений.

Итак, мы понимаем, что пользователи могут вводить что угодно или значения, принадлежащие к любому типу данных, но для поддержания логики приложения мы должны ограничить ввод данных пользователем, запросив сообщение об ошибке.

Поэтому перед сохранением или использованием любых вводов, введенных пользователем, разработчик должен убедиться, что вводимые данные должным образом дезинфицированы и проверены. Разработчики могут ограничить вводимые значения или уменьшить поверхность атаки, введя ограничения на поля ввода, например, в определенное поле можно вводить только числа.

Пример. Каждый раз, когда мы совершаем какие-либо покупки в Интернете, мы выбираем любой товар, и его количество выражается числовым значением, например 1,2,3. Поэтому, если мы введем большее количество, изменив его через перехватывающий прокси, приложение может вести себя некорректно и может отобразить «Нет в наличии». Таким образом, в этом случае разработчики должны применить проверку ввода, чтобы пользователь не мог ввести количество, которое намного превышает то, что может принять приложение.

Что может случиться, если будет отправлен нестандартный ввод?

Разработчик реализовал ограничение, согласно которому в значение количества можно вводить только числовые значения или положительные целые числа, но хакеры могут также вводить значения –ve. Поскольку на это не накладывается никаких ограничений, хакеры могут легко обойти ограничения на стороне сервера и могут заказать большинство вещей за меньшую сумму. Посмотрим, как это будет происходить.

Эксплуатация

Есть сайт электронной коммерции. Есть так много вещей, которые можно купить, но злоумышленник хочет купить что-то бесплатно.

Итак, на скриншоте выше вы можете видеть, что мы добавили куртку, которая стоит 1337 долларов, но у нас недостаточно средств для ее покупки.

На момент первоначального входа в систему каждому пользователю предоставляется кредит в размере 100 долларов США.

Это означает, что пользователь может приобрести все, что меньше 100 $.

Злоумышленник снова зашел в приложение и на этот раз перехватил запрос на добавление товара в корзину.

Перехваченный запрос выглядит так:

Как видите, у этого запроса есть параметр количество, которое позволяет изменить его на отрицательное количество.

Значение отрицательного продукта было принято, а значение корзины было установлено отрицательным.

На этот раз давайте попробуем что-нибудь купить, добавив отрицательное количество и положительное, чтобы сбалансировать стоимость корзины.

Итак, мы добавили в корзину отрицательные количества.

Теперь, чтобы сбалансировать корзину, я добавил 1 куртку и 62 различных предмета.

Таким образом, если вы умножите 40,95 на 31, получится -1269,45, а куртка стоит +1337, поэтому общая стоимость корзины будет 67,55.

Посмотрим, что произойдет, когда он будет добавлен в корзину. Корзина выглядит так

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

Поскольку у нас уже есть кредит магазина в размере 100 долларов США, мы можем легко купить этот продукт, щелкнув по ссылке, разместив заказ, и готово.

Мы получили подтверждение заказа из приложения.

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

Исправление

  1. Всегда убедитесь, что вы фильтруете или дезинфицируете вводимые пользователем данные перед их использованием.
  2. 2. Имейте в виду, что если вы обнаружите на целевом веб-сайте одну форму, которая не может безопасно обрабатывать нетрадиционный ввод, вероятно, что другие формы будут иметь те же проблемы.