PHP 5.3.9 Ayuda de vulnerabilidad

8

Esta es una de las primeras vulnerabilidades que he intentado explotar por mi cuenta para ampliar mi conocimiento de las vulnerabilidades.

Este es un buen resumen de vulnerabilidad . He podido controlar EIP pero no estoy seguro de cómo ejecutar el código.

Mi máquina de prueba es Ubuntu 11.10 y tiene ASLR habilitado junto con NX para la pila, el montón y las bibliotecas. La cadena que controlo (como se describe en el artículo) se almacena en el montón, por lo que no puedo colocar ningún código allí ya que no es ejecutable. Aparte de EIP, también controlo el registro EDI, pero eso es todo. Este es un sistema de 32 bits, por lo que la fuerza bruta es suficiente para derrotar a ASLR (además, no tengo ningún otro mecanismo de seguridad, no es muy realista, pero es un buen comienzo).

EDITAR:

Acabo de encontrar este PoC . Básicamente, el autor llega al mismo lugar donde estoy y luego confía en el código del servidor PHP para dar un paso más allá para poder leer la memoria del proceso de Apache. Afirma que la ejecución del código es "altamente posible", pero no entra en mucho más detalle.

    
pregunta Bhubhu Hbuhdbus 04.07.2012 - 04:24
fuente

1 respuesta

1

Esta es una vulnerabilidad desagradable que es muy similar a un Dangling Pointer . En resumen, le permite a un atacante remoto leer y / o escribir en una dirección de memoria arbitraria. Esto es mucho más valioso que un simple desbordamiento de búfer basado en pila, especialmente en la explotación de sistemas modernos. Un sólido aprovechamiento de ejecución remota de código para esta vulnerabilidad no ha surgido al público. Sin embargo, Vupen, un conocido distribuidor de exploits, puede haber desarrollado tal exploit .

Debido a que esta también es una vulnerabilidad de divulgación de memoria, no tiene que usar la fuerza bruta para omitir ASLR. Se ha escrito un exploit para leer el Dirección de memoria ASLR de donde está su carga útil en la memoria.

Todavía existe el problema de controlar el EIP. No he visto un exploit que haga esto, pero parece que es posible, tal vez con un GOT sobrescrito o corrompiendo el marco de la pila.

Después de usted el EIP / RIP tiene algunas opciones. Una opción es utilizar Programación Orientada por Devolución (ROP Chain) para ejecutar código arbitrario. Las cadenas ROP consisten en "gadgets" útiles, o segmentos de ensamblador dentro de la aplicación que realizan una tarea útil y estas tareas se encadenan entre sí. Un gadget ROP común controla el EIP / RIP con un jmp edx . Otro gadget ROP útil sería una llamada a system() , tenga en cuenta que debido a ASLR, una llamada ret2libc a system() fallará porque no conoce la dirección de esta función, por lo tanto, la necesidad de gadgets de ROP. Estos son algunos ejemplos simples, sin embargo, las cadenas ROP también pueden ser muy complejas. Las cadenas ROP son útiles porque consisten en un código que debe ser ejecutable y no aleatorio. Hay herramientas para ayudarlo a encontrar gadgets ROP dentro de una aplicación de destino. En una aplicación como Apache, es probable que haya muchos gadgets ROP útiles.

O otra opción es perder memoria para encontrar una dirección de memoria en la que pueda colocar una carga útil. Luego, elimine el bit NX (que puede necesitar una cadena ROP ) para hacer su carga útil ejecutable y apuntar el EIP / RIP a su carga útil.

Boom.

    
respondido por el rook 11.07.2012 - 21:33
fuente

Lea otras preguntas en las etiquetas