Entrada
Hola de nuevo
Esta vez el artículo no planteará preguntas "serias".
Esta será una historia sobre cómo, sin conocer la programación, pero siendo bastante inteligente y atento, puede encontrar una vulnerabilidad grave que, por ejemplo, le permitirá cancelar todo el dinero de una cuenta con solo un nombre de usuario y contraseña (leer, omitir la autenticación de dos factores o misma confirmación por SMS).
Por el momento, Qiwi ya lo ha parcheado con éxito, por lo que intentaré reforzar las explicaciones con capturas de pantalla modernas, a veces explicando cómo se veía hace 2.5 años.
Ahora al punto
Digamos que tiene un nombre de usuario: la contraseña de la billetera Qiwi de otra persona.
Digamos que hay 100k rublos.
Y taaaaan quieres tomar posesión de ellos.
Pero no puede simplemente cancelar el dinero: necesita confirmación por SMS.
Pero somos inteligentes, esto no nos detendrá.
Paso 1. Inicie sesión en su cuenta y cree una tarjeta virtual allí.Vemos esa foto

Parece que tenemos muy poca información. Solo 4 últimos dígitos de la tarjeta y la duración de la tarjeta.
Pero
antes había 6 (!) Últimos dígitos de la tarjeta . Es decir, otros 10 dígitos eran desconocidos.
Y necesitamos todos los números en la tarjeta. ¿Dónde conseguir más? Muy simple
Todas las tarjetas tienen un BIN: los primeros 6 dígitos de las tarjetas de un determinado banco del mismo tipo deben ser iguales.
Paso 2. Subimos al navegador y buscamos en Google "Qiwi BIN"Inmediatamente descubrimos que el contenedor es 489049.
¡Y ahora ya tenemos 12 dígitos! ¡Solo quedan 4!
Pero aquí viene la dificultad.
Estos 4 dígitos no parpadean en ningún lado y, al parecer, no hay ningún lugar para obtenerlos.
Pero, por supuesto, si te esfuerzas, puedes encontrar :)
Paso 3. Encuentra los últimos 4 dígitos que faltanPara hacer esto, necesitamos tener una cuenta en Qiwi con 1000r y saber qué es el
Algoritmo de la
Luna .
Vamos en orden.
Si abre alguna operación en Qiwi, muestra la fecha de pago y el número de recibo.
Tal vez algunos ya hayan adivinado por qué necesitamos 1k en la cuenta.
¡Sí, sustituiremos los números en orden en lugar de los 4 dígitos desconocidos que permanecieron desconocidos y los enviaremos a los números de tarjeta en rublos!
Y en una de las operaciones recibiremos un 1p entrante en la cuenta donde se encuentran los preciados 100k rublos.
Solo queda comparar el tiempo de envío de dinero.
Anteriormente, era posible hacer coincidir los números de operación, pero ahora lo han ocultado. Y lo hicieron bien.
Y ahora los más atentos dirán que, de hecho, 4 dígitos son 10k operaciones, no 1k. Por lo tanto, necesita 10k rublos y mucho tiempo para encontrar los 4 dígitos correctos.
Y esto no es del todo cierto. Te presento el
algoritmo de la
luna!El algoritmo de Luhn es un algoritmo para calcular el dígito de verificación de un número de tarjeta de plástico de acuerdo con ISO / IEC 7812. No es una herramienta criptográfica, pero está destinado principalmente a detectar errores causados por la corrupción accidental de datos (por ejemplo, al ingresar manualmente un número tarjetas, al recibir datos en el número de seguro social por teléfono). Solo permite con cierto grado de confiabilidad juzgar la ausencia de errores en el bloque de números, pero no permite encontrar y corregir la inexactitud descubierta.
Si es muy interesante, google, y le contaré brevemente sobre el algoritmo y cómo nos ayudará.
Este algoritmo le permite confirmar si el número de tarjeta es válido. Es decir, después de ejecutar nuestras 10k opciones a través de este algoritmo, puede dejar solo el número de tarjetas potencialmente existentes. Adivina cuántos habrá?
Correcto, exactamente 1k.
Por supuesto, todo esto parece muy útil para hacerlo manualmente, pero ¿qué impide que un script simple genere estas mismas opciones de 1k?
Aquí hay algunos ejemplos de implementación de Wikipedia:
Ejemplo de algoritmo de luna en JSfunction luhnAlgorithm(digits) { let sum = 0; for (let i = 0; i < digits.length; i++) { let cardNum = parseInt(digits[i]); if ((digits.length - i) % 2 === 0) { cardNum = cardNum * 2; if (cardNum > 9) { cardNum = cardNum - 9; } } sum += cardNum; } return sum % 10 === 0;}
Ejemplo de algoritmo lunar en PHP function luhnAlgorithm($digit) { $number = strrev(preg_replace('/[^\d]/', '', $digit)); $sum = 0; for ($i = 0, $j = strlen($number); $i < $j; $i++) { if (($i % 2) == 0) { $val = $number[$i]; } else { $val = $number[$i] * 2; if ($val > 9) { $val -= 9; } } $sum += $val; } return (($sum % 10) === 0); }
Ahora necesitamos clasificar estas opciones de 1k usando el método que describí anteriormente.
Y listo, tenemos los últimos 4 dígitos.
Ahora tenemos el código completo de la tarjeta y su validez.Por supuesto, no tenemos el código CVV (el que está escrito en el reverso), pero en algunos lugares no es necesario.
Por ejemplo, Amazon!
Sí, vamos a Amazon y pedimos cualquier cosa con la ayuda de datos recién creados.
Por ejemplo, Steam codifica por dinero o algo así. En general, hay algo electrónico para vender rápidamente en Internet. Perderemos un poco en dinero, pero no más del 20%, lo más probable.
Eso es todo! ¡Obtuviste + 79k de ganancias!
¡No olvides que esto ya no funciona!
Pero si encuentra algo similar, dígale a Qiwi que (con suerte) lo arreglarán.
Lo presenté para mostrar que puedes encontrar cosas interesantes y agujeros de seguridad sin siquiera poder programar. Y para el desarrollo general.
Buena suerte a todos :)