Para evitar abusos, no indico el nombre del operador.
Todo comenzó con el hecho de que compré a la llegada una tarjeta SIM del operador con el plan de tarifas Pay-as-you-go. Este es el plan de tarifas más común que era popular en Rusia antes del advenimiento de los planes de tarifas de paquete, es decir, usted paga por cada minuto, mensaje, megabyte, mientras tiene un saldo que debe reponerse.
En todas partes tenía Wi-Fi, y la comunicación celular era bastante necesaria para las llamadas entrantes y el acceso raro a Internet móvil. Sin embargo, el problema con los operadores estadounidenses es que el saldo de su cuenta puede simplemente vencer. Luego expiró después de 30 días, es decir, el dinero en la cuenta simplemente se quemó. Podría transferirse por completo al próximo mes, pero para esto fue necesario hacer al menos una reposición de la cuenta. Decidí hacer una recarga mínima para mantenerme en contacto.
Ingresé a la Cuenta en el sitio web del operador e intenté hacer un depósito desde una tarjeta bancaria. A diferencia de Rusia, la cantidad no se pudo ingresar aquí. Me ofrecieron una opción de solo unas pocas cantidades, el mínimo es de $ 5. No necesitaba tanto, pero pagaba este dinero cada mes para mantenerme en contacto. Como resultado, después de unos meses, "inútil" se acumularon varias decenas de dólares en la cuenta sin posibilidad de gastarlo.
Al pasar de alguna manera por la tienda del operador en uno de los centros comerciales, vi tarjetas de recarga normales (tarjetas de rascar). Eran de las mismas denominaciones que se ofrecieron para el pago en el sitio. Pero aparentemente debido a mi deseo intuitivo de experimentar, decidí comprar una tarjeta de ese tipo, nuevamente por $ 5. Cuando llegó el momento del pago, comencé a considerar la tarjeta. Parece el mismo principio que en Rusia (cuando estas tarjetas todavía eran populares): simplemente puede marcar un comando con un número de tarjeta y activarlo, o puede "deambular" en el menú USSD (equipos de la categoría * XXX #). Nuevamente, debido a algún deseo de experimentar, decidí elegir un largo camino desde el menú. Entre las opciones se propuso averiguar el saldo, activar la tarjeta de rascar, reponer la cuenta con una tarjeta bancaria.
En Rusia, de alguna manera, siempre me ocupé de ingresar los datos de la tarjeta en línea, por lo que pagar con una tarjeta a través de ese menú fue interesante para mí (después de todo, estos pagos fueron el tema de mi diploma), aunque parecía inseguro (nuevamente en Rusia, generalmente se puede encontrar en una ventana separada del banco adquirente, pero no se transfieren al vendedor en claro), decidí intentarlo. Inmediatamente me sorprendió la oferta de ingresar el monto. Es decir, no me ofrecieron la opción estándar de cantidades, como en cualquier otro lugar, pero me sugirieron que ingresara la cantidad. Seleccioné $ 1, ingresé los detalles de la tarjeta en los siguientes pasos y el pago pasó. Como puede suponer, luego intenté ingresar $ 0.01, también pasó.
Uno podría estar contento de que ya no necesito transferir inútilmente $ 5 cada mes a mi saldo, sino gastar solo 1 centavo y completar el experimento. Pero después de un par de horas, quería volver a mirar la Cuenta en el sitio web del operador y las opciones de reabastecimiento.
Entonces Se me ofrece completar un formulario con los detalles de la tarjeta, el monto, etc. Rastreo cómo se ve esta solicitud POST con el envío del formulario. Copio, pego en Postman, intento repetir la solicitud. El servidor responde con un error, parece que se están agotando algunos tokens en el formulario.
Decido ir por el camino simple. Me ofrecen elegir la cantidad de la lista desplegable. Por supuesto, esto es algún tipo de
select
con la lista de
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>
Obviamente, el
value
solo
value
envía al servidor. ¿Qué significa 5, 10, 30 después de un guión que entiendo? Esta es la cantidad de reposición, pero ¿qué significa el primer valor? ¿Hay constantes en el código fuente o la suma simplemente se extrae de los datos?
Lo intento
REG12-0.01
en uno de los puntos,
REG12-0.01
los datos de la tarjeta y la envié. Aparece un mensaje: "Gracias. Se ha acreditado un monto de carga de $ 0.01 a su número prepago ". La misma cantidad fue debitada de la tarjeta. Todo parece estar bien. Puede elegir cualquier cantidad, aunque ya descubrí esta oportunidad a través de USSD, no hay problema.
Pero aquí está el punto más importante. Recibo un mensaje SMS al número: "se abonaron $ 30 en su cuenta". El saldo de la cuenta se incrementa en esta cantidad.
Ha habido muchas publicaciones de este tipo con varios servicios populares en este sitio y probablemente habrá aún más. En el proceso de desarrollo de sistemas (especialmente no en empresas con un estricto enfoque de TI), prácticamente no hay pruebas / controles de seguridad / vulnerabilidad y parece que la situación no mejorará en el futuro cercano. Afortunadamente, aquí no se ven afectados los datos personales del usuario. Este experimento apenas puede llamarse un hack, de hecho, se realiza el envío habitual de la cantidad deseada al servidor, en lugar de que la facturación del operador decida reponer el saldo en una cantidad miles de veces mayor que la seleccionada.