Entrada
Olá novamente.
Desta vez, o artigo não fará perguntas "sérias".
Esta será uma história sobre como, sem conhecer a programação, mas sendo bastante experiente e atento, é possível encontrar uma vulnerabilidade séria que, por exemplo, permitirá que você anule todo o dinheiro de uma conta com apenas nome de usuário e senha (leia, ignore a autenticação de dois fatores ou mesma confirmação por SMS).
No momento, o Qiwi já o corrigiu com êxito, então tentarei reforçar as explicações com capturas de tela modernas, às vezes explicando como era 2,5 anos atrás.
Agora ao ponto
Digamos que você tenha um nome de usuário: a senha da carteira Qiwi de outra pessoa.
Digamos que haja 100 mil rublos.
E você quer muitíssimo tomar posse deles.
Mas você não pode simplesmente anular o dinheiro - precisa de confirmação por SMS.
Mas somos inteligentes, isso não vai nos parar.
Etapa 1. Faça login na sua conta e crie um cartão virtual lá.Vemos essa imagem

Parece que temos muito pouca informação. Apenas os últimos 4 dígitos do cartão e a duração do cartão.
Mas
antes havia 6 (!) Últimos dígitos do cartão . Ou seja, outros 10 dígitos eram desconhecidos.
E precisamos de todos os números no cartão. Onde conseguir mais? Muito simples
Todos os cartões têm um BIN - os 6 primeiros dígitos de um determinado banco do mesmo tipo devem ser os mesmos.
Etapa 2. Entramos no navegador e pesquisamos "Qiwi BIN"Imediatamente descobrimos que o compartimento é 489049.
E agora já temos 12 dígitos! Restam apenas 4!
Mas aqui vem a dificuldade.
Esses quatro dígitos não piscam em lugar algum e, ao que parece, não há onde obtê-los.
Mas, é claro, se você se esforçar, pode encontrar :)
Etapa 3. Encontre os últimos 4 dígitos ausentesPara fazer isso, precisamos ter uma conta no Qiwi com 1000r e saber o que é o
algoritmo da
lua .
Vamos em ordem.
Se você abrir qualquer operação no Qiwi, mostrará a data do pagamento e o número do recebimento.
Talvez alguns já tenham adivinhado por que precisamos de 1k na conta.
Sim, substituiremos os números em ordem, em vez dos 4 dígitos desconhecidos que permaneceram desconhecidos e os enviaremos para os números dos cartões em rublos!
E em uma das operações, receberemos 1p de entrada na conta onde estão os estimados 100k rublos.
Resta apenas comparar o tempo de envio de dinheiro.
Anteriormente, era possível combinar números de operação, mas agora eles foram ocultados. E eles fizeram certo.
E agora os mais atentos dirão que de fato 4 dígitos são operações de 10k, não 1k. Então você precisa de 10 mil rublos e muito tempo para encontrar os 4 dígitos certos.
E isso não é inteiramente verdade. Apresento a você o
algoritmo da
lua!O algoritmo Luhn é um algoritmo para calcular o dígito de verificação de um número de cartão plástico de acordo com a ISO / IEC 7812. Não é uma ferramenta criptográfica, mas destina-se principalmente a detectar erros causados por corrupção de dados inadvertida (por exemplo, ao inserir manualmente um número cartões, ao receber dados do número de segurança social por telefone). Ele permite apenas com um certo grau de confiabilidade julgar a ausência de erros no bloco de números, mas não permite encontrar e corrigir a imprecisão descoberta.
Se for muito interessante - google, e vou falar brevemente sobre o algoritmo e como ele nos ajudará.
Este algoritmo permite confirmar se o número do cartão é válido. Ou seja, depois de executar nossas opções de 10.000 por esse algoritmo, você pode deixar apenas o número de cartões potencialmente existentes. Adivinhe quantos serão?
Certo, exatamente 1k.
Obviamente, tudo isso parece muito útil para fazer manualmente, mas o que impede um script simples de gerar essas opções de 1k?
Aqui estão alguns exemplos de implementação da Wikipedia:
Exemplo de algoritmo da lua em 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;}
Exemplo de algoritmo da lua em 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); }
Agora precisamos classificar essas opções 1k usando o método que descrevi acima.
E pronto - temos os últimos 4 dígitos.
Agora temos o código completo do cartão e sua validade.Obviamente, não temos código CVV (o que está escrito no verso), mas em alguns lugares isso não é necessário.
Por exemplo, Amazon!
Sim, vamos à Amazon e encomendamos qualquer coisa com a ajuda de dados recém-criados.
Por exemplo, o Steam codifica por dinheiro ou algo parecido. Em geral, há algo eletrônico para vender rapidamente na Internet. Perderemos um pouco de dinheiro, mas não mais que 20%, provavelmente.
Isso é tudo! Obteve + 79k de lucro!
Não esqueça que isso não está mais funcionando!
Mas se você encontrar algo semelhante - diga ao Qiwi, eles (provavelmente) irão corrigi-lo.
Eu expliquei para mostrar que você pode encontrar coisas legais e falhas de segurança sem nem mesmo poder programar. E para o desenvolvimento geral.
Boa sorte a todos :)