Es un fragmento de JavaScript que intenta explotar una vulnerabilidad de seguridad relacionada con Facebook, más s específicamente a su control de ActiveX del cliente del cargador de imágenes.
La parte cobj
intenta crear un objeto de ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
que resulta ser un control de cargador de foto ActiveX. Las funciones ExtractIptc y ExtractExif pertenecen a ese control ActiveX específico.
El núcleo del código es realmente la manipulación de la dirección de la memoria, el desplazamiento, utilizando máscaras para separar los bits altos y bajos. Por ejemplo, hex((addr>>16)&0xFFFF,4))
toma una dirección, la desplaza 16 bits hacia la derecha, borra la parte inferior y la convierte en un número hexadecimal. Para comprender realmente la mayor parte de este código, debe tener las herramientas de depuración correctas.
buscar en Google el {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
ClassID dieron algunos resultados interesantes que usted debe buscar en:
http://www.kb.cert.org/vuls/id/776931
http://seclists.org/fulldisclosure/2008/Feb/0023.html
http://securitytracker.com/alerts/2008/Feb/1019297.html
Tenga en cuenta que esto no es PHP. Es javascript
Más detalles ...
cobj es, probablemente, se tradujo en una llamada CreateObject(). Cada control ActiveX registrado tiene su propia identificación de clase y tienen el formato {0000000000-0000-0000-0000-000000000000}
. Cuando desee consultar la biblioteca registrada y crear una instancia de la misma, puede usar su nombre o su ID de clase.
El control ActiveX en sí debe ser un archivo .OCX o .DLL en su computadora. Si puede encontrar este archivo y depurarlo, obtendrá la mayoría de los detalles específicos sobre las funciones ExtractIptc y ExtractExif. Una vez más, esas dos funciones parecen tener vulnerabilidades cuando se las llama de una manera específica, y esto es lo que el script está tratando de explotar.
La parte var hsta=0x0c0c0c0c
define una variable hsta, igual al número hexadecimal 0c0c0c0c. Es lo mismo que escribir var hsta = 202116108
. En ingeniería informática, es más fácil tratar con direcciones hexadecimales que con números decimales, ya que las direcciones y datos dentro de la memoria de la computadora son binarios y se pueden representar directamente como un número hexadecimal. Más detalles sobre hexadecimal allí: http://en.wikipedia.org/wiki/Hexadecimal.
El nombre de la variable hsta parece estar en notación húngara (la primera letra representa el tipo de variable - h para el hex). Por lo tanto, supongo que significa dirección de inicio hexadecimal (hsta). Siguiendo la misma línea de pensamiento, mi conjetura sería que pl
significa carga y plc
significa código de carga.
El código de carga es el código que la computadora ejecutará si el exploit fue exitoso, y es lo que se ve al comienzo del script (\x43\x43\x43\x43\n....\xEF)
. Está codificado como shell code para una arquitectura de CPU y un sistema operativo en particular. Eso significa que el código ya está compilado, es independiente y puede conectarse a la CPU directamente. Si decodifica esto, probablemente encontrará algo parecido al código de máquina. Probablemente no es nada positivo.
La función hex(num,width)
convierte un número decimal en su forma hexadecimal. Probé la función por separado, y devolvió 3E8 al alimentarlo 1000. La variable de ancho simplemente se usa para salir de la secuencia de comandos si el número hexadecimal resultante es mayor que el especificado.
Sobre esta parte:
var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
La variable buf es un búfer. Un buffer no es más que datos en la memoria. Se puede interconectar como una cadena, como se muestra en este código. Supongo que se crea un búfer de 400 bytes a partir de cualquier contenido que esté en la memoria en 0x0c0c0c0c, y luego se alimenta en dos funciones.
Faltan varias definiciones de funciones aquí. Es decir, la función hav().
Esto no es todo PHP.De hecho, solo una pequeña parte se parece a PHP. El resto se parece a JavaScript. Además, haga un mejor trabajo formateando su código; es casi imposible de leer. –
@Peter Bailey: Sí, lo arreglé para él. –
Modifiqué mi respuesta con más detalles para usted. –