¿Se puede escribir y ejecutar PHP válido en codificaciones de caracteres que no sean ASCII?

3

Encontré una imagen jpeg en un servidor que contenía la cadena <?php . El servidor también alberga una aplicación escrita en PHP. El contenido de la imagen que viene después de la cadena <?php no es ascii.

No puedo encontrar nada en el archivo que parece ser un código PHP válido, pero no estoy dispuesto a aceptar que la cadena <?php aparezca dentro del archivo por coincidencia.

La imagen jpeg se puede ver en Windows, pero muestra claramente anomalías visuales alrededor de 1/3 del camino hacia abajo. Guardar la parte de la imagen que comienza con <?php como una imagen jpeg separada y verla como una imagen confirma que las anomalías visuales comienzan en el mismo punto en que ocurre la cadena <?php .

Estoy razonablemente seguro de que esta imagen contiene PHP malicioso, pero mis intentos de detectar el código PHP ejecutable han fallado.

Editar

Esta imagen tiene anomalías visuales que comienzan en el punto de la cadena "<? php" y continúan hasta la parte inferior de la imagen. Para las pruebas, tomé un jpeg diferente (conocido como seguro), lo abrí en un editor de texto y agregué la cadena "<? Php" en algún lugar en el medio. La imagen de prueba tiene cero anomalías visuales. Esto me implica que la imagen en cuestión no solo fue maliciosamente alterada para contener la cadena "<? Php", sino que hubo alteraciones adicionales hechas después de la cadena "<? Php". Parece probable que esta imagen de alguna manera contenga código PHP ejecutable.

-

¿Esta imagen podría contener PHP ejecutable válido que esté codificado de manera que no sea legible en un editor de texto?

¿Cómo puedo confirmar y / o traducir el contenido del archivo de imagen para poder determinar qué ha hecho el malware?

Editar

La imagen está adjunta

Acontinuaciónsemuestralaimagenanteriorquesemodificó

    
pregunta Aaron Cicali 20.09.2018 - 03:10
fuente

4 respuestas

2

No, el código PHP siempre es al menos una parte ASCII legible.

Los métodos típicos de ofuscación son decodificar un fragmento de código y ejecutar eso:

eval(gz_decompress(base64_decode("0Z074L7expJKXs...")));

Pero aún verías un nombre de función de PHP después de <?php .

    
respondido por el Sjoerd 20.09.2018 - 08:53
fuente
0

El código php debe ser ASCII.

Cualquier cosa fuera de puede ser binario .

Cualquier cosa dentro de las comillas dentro del código php puede ser binario.

Es posible que esté viendo código de PHP codificado típicamente este necesita archivos binarios y / o licencias adicionales para ejecutar.

Podría haber sido útil (¿más seguro?) si hubiera incluido una captura de pantalla del contenido como se ve en su editor en las etiquetas.

    
respondido por el symcbean 20.09.2018 - 22:40
fuente
0

La respuesta seleccionada es probablemente cierta: el código PHP válido siempre es al menos una parte ASCII legible, sin embargo ...

Sí, PHP se puede escribir en non-ascii.

Puede encontrar un ejemplo de PHP UTF-8 aquí: enlace

<?php
$Δ = 1;
++$Δ;
echo $Δ;

Este código puede guardarse como UTF-8 y ejecutarse con éxito. La salida de la ejecución de este script es 2 .

Información adicional

El código anterior prueba que PHP puede escribirse como no ascii, pero aún se asemeja al código PHP válido ... hay finales de línea, signos de dólar para las variables, echo y declaraciones de asignación, y un operador único.

La publicación original se refería al contenido específico no relacionado con ASCII que siguió a una etiqueta de apertura <? php, pero ese código no se asemejaba al código como en este ejemplo anterior. En su lugar, parecía ser contenido de imágenes binarias, o posiblemente cadenas hexadecimales. Mi comprensión actual de la codificación de caracteres no me permite descartar la posibilidad de que el código en cuestión sea ejecutable, sin embargo, parece poco probable.

Dicho esto, si PHP permite que los símbolos mencionados ($ =; ++ echo) también se escriban como equivalentes no-ascii, entonces es completamente posible que exista un código que no se parezca al PHP reconocible. Sería genial si alguien con un amplio conocimiento de la codificación de caracteres pudiera agregar a esta publicación.

    
respondido por el Aaron Cicali 26.10.2018 - 19:01
fuente
0
  

¿Esta imagen podría contener PHP ejecutable válido que esté codificado de manera que no sea legible en un editor de texto?

Sí. Pero depende de cómo se utilizará este código. Supongo que el código apuntado debe inyectar el código de la imagen. En caso de que exista alguna devolución de llamada, la descodificará antes de que pueda ser codificada (base64 o cualquier otra cosa). En algunos casos, estaba encontrando el código que se ha incluido en la vista en bruto como este:

<?php 
include(path/to/image);
?>
  

¿Cómo puedo confirmar y / o traducir el contenido del archivo de imagen para poder determinar qué ha hecho el malware?

Podría ser difícil. Necesitas entender el exploit. Si utiliza alguna solución de código abierto, puede intentar encontrar algunos entre los problemas de seguridad conocidos.

    
respondido por el Aleksandr Ryabov 29.10.2018 - 19:07
fuente

Lea otras preguntas en las etiquetas