Как обойти временной интервал, определенный на сервере для каждого запроса с Jmeter - PullRequest
0 голосов
/ 15 апреля 2020

Мой сайт был взломан отправкой двух одновременных запросов злоумышленником. На сервере было получено два одинаковых почтовых запроса:

jmeter request I created

enter image description here

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

, поэтому я смоделировал один и тот же запрос в jmeter для отправки 2 или более запросов на сервер одновременно с syn c timer.But. Поскольку я реализовал функцию таким образом, что, если выполняется одна транзакция, он не должен обрабатывать второй пост-запрос транзакции из того же uid и denomi (вы можете найдите эти два в поле параметров этого запроса на изображении выше.).

Вот мой код

php code for not processing request for another 20 seconds

Итак, когда Я сделал это с помощью jmeter с двумя одновременными запросами: один из них завершился успешно, а второй получил сообщение «Вы сделали аналогичный заказ менее чем за 20 секунд go.»

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

Мне нужно отправить параллельный запрос таким образом, чтобы он не go соответствовал условию if или должен не создавать флаг в настройке базы данных, что транзакция уже выполнена. Путем манипулирования временем сервера? Или я совершенно ошибаюсь при отправке параллельного запроса? будет ли еще какой-нибудь черный ход? У кого-нибудь есть идея?

Что я пробовал: одновременный запрос с таймером syn c и наращиванием 0 utf 8 кодирование и декодирование количества и знаменателей в поле параметра запроса перехватывает запрос с помощью burpsuite для возможных манипуляций. Ничего не получилось

1 Ответ

0 голосов
/ 16 апреля 2020

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

Как я воспроизвел проблему: 1. Создал 2 идентичных запроса для выполнения платежа с помощью кошелька в jmeter под 2 группами потоков таким образом, чтобы эти запрос будет отправлен одновременно. 2. Но изменил URL реферера одного, чтобы запросить другой URL, где куплен какой-то другой предмет. 3. И, следовательно, активный товар продается два раза по цене только одного. Система фактически вычитает деньги в кошельке, но если у пользователя есть только цена, чтобы купить один предмет. он просто покупает два элемента и отправляет его пользователю с вычетом только один раз.

Это лазейка в коде разработчика.

Исправлено:

  1. Блокировка транзакции в базе данных
  2. Удаление создания сеанса с определенной загрузкой страниц
  3. Создание переменных записи запроса в отправляемых запросах
  4. И, наконец, для дополнительной безопасности - реализовано CORS
...