Хабрахабр

[Из песочницы] Как я случайно обнаружил возможное бесконечное пополнение счёта у своего американского сотового оператора

В целях недопущения злоупотреблениями я не указываю имя оператора.

Это самый обычный тарифный план, которые были популярны в России до появления пакетных тарифных планов, то есть платишь за каждую минуту, сообщение, мегабайт, при этом у тебя есть баланс, который необходимо пополнять.
Везде у меня был Wi-Fi, а сотовая связь скорее была нужна для входящих звонков и редких выходов в мобильный Интернет. Всё началось с того, что я купил по приезде SIM-карточку оператора с тарифным планом Pay-as-you-go. Тут он истекал через 30 дней, то есть деньги на счёте просто сгорали. Однако проблема американских операторов, что твой баланс на счёте может просто истечь. Я решил делать минимальные пополнения, чтобы оставаться на связи. Его можно было целиком перенести на следующий месяц, но для этого нужно было сделать хоть какое-то пополнение счёта.

В отличие от России тут сумму ввести было нельзя. Я зашёл в Аккаунт на сайте оператора и попробовал сделать пополнение с банковской карточки. Мне столько было не нужно, но я платил эти деньги каждый месяц, чтобы оставаться на связи. Мне предлагали на выбор всего несколько сумм, минимальная $5. В итоге через несколько месяцев на счёте накопились «бесполезные» несколько десятков долларов без шансов их когда либо потратить.

Они были таких же номиналов, как и предлагали для оплаты на сайте. Проходя как-то мимо торговой точки оператора в одном из торговых центров, я увидел обычные карточки пополнения (скретч-карты). Когда наступил момент оплаты, я стал рассматривать карточку. Но видимо из-за своей интуитивной тяги к экспериментам я решил приобрести такую карточку, опять же на $5. Опять же из-за какого-то желания экспериментировать, я решил выбрать долгий путь с меню. Вроде такой же принцип как в России (когда эти карточки ещё были популярны): можно просто набрать команду с номером карточки и активировать её, а можно «бродить» по USSD-меню (команды из разряда *XXX#). Среди опций предлагалось узнать баланс, активировать скретч-карту, пополнить счёт с банковской карты.

Сразу же меня удивило предложение ввести сумму. В России я как-то всегда имел только дело с вводом данных карты в онлайн, поэтому оплата картой через такое меню была для меня интересной (в конце концов, эти платежи были темой моего диплома), хотя казалось небезопасной (опять же в России обычно данные водятся в отдельном окне банка-эквайера, а не передаются продавцу в открытом виде), я решил попробовать. Я выбрал $1, ввёл данные карты в следующих шагах и оплата прошла. То есть мне не предлагали стандартный выбор сумм, как везде, а предлагали именно ввести сумму. 01, это прошло тоже. Как несложно догадаться, дальше я попробовал ввести $0.

Но спустя пару часов мне захотелось снова посмотреть Аккаунт на сайте оператора и опции пополнения. Можно было обрадоваться, что мне не надо теперь бесполезно переводить каждый месяц по $5 на свой баланс, а тратить всего 1 цент и завершить эксперимент.

Мне предлагают заполнить форму с данными карты, суммой и так далее. Итак. Копирую, вставляю в Postman, пытаюсь повторить запрос. Отслеживаю, как выглядит этот POST-запрос с отправкой формы. Сервер отвечает ошибкой, похоже, истекают какие-то токены в форме.

Мне же предлагают выбрать сумму из выпадающего списка. Решаю идти простым путём. Конечно это какой-то select со списком option.

<select class="selectpicker select form-control show-tick text field" title="Specify an amount.." id="billing_amount" name="billing_amount">
<option class="bs-title-option" value=""></option>
<option value="REG10-5">$5</option>
<option value="REG11-10">$10</option>
<option value="REG12-30">$30</option>
</select>

На сервер очевидно отправляется только value. Что значит 5, 10, 30 после дефиса мне понятно, это сумма пополнения, но что значит первое значение? Есть ли также какие-то константы в исходном коде или сумма просто извлекается из полученных данных?

Выставляю REG12-0. Пробую. Появляется сообщение: «Thank you. 01 у одного из пунктов, ввожу данные карты, отправляю. 01 load amount has been credited to your prepaid number». $0. Кажется всё отлично. Эта же сумма списалась с карты. Можно выбирать любую сумму, хотя я и так раньше обнаружил эту возможность через USSD, никакой проблемы.

Мне приходит SMS-сообщение на номер: "$30 was credited to your account". Но тут самый главный момент. Баланс счёта увеличивается на эту сумму.

В процессе разработки систем (особенно не в компаниях строгой IT-направленности) тестов/контроля на безопасность/уязвимость практически нет и похоже, что в ближайшем будущем ситуация не улучшится. Таких публикаций с различными популярными сервисами на этом сайте было много и наверное будет ещё больше. Данный эксперимент трудно даже назвать каким-то взломом, по сути, происходит обычная отправка желаемой суммы на сервер, взамен чего биллинг оператора решает пополнить баланс на сумму в тысячи раз больше выбранной. К счастью никакие личные данные пользователей тут не страдают.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть