buffer / heap overflow - registro de lo que se ejecuta

4

Cuando se ejecuta el desbordamiento del búfer / desbordamiento del montón, ¿es EIP el que indica qué parte se ejecutará a continuación? Además, cuando se explota la parte que tiene la vulnerabilidad de desbordamiento del búfer, después de la ejecución, ¿ESP apuntará al inicio de los códigos de explotación (que serán algunas combinaciones de códigos de shell y gibbersih)?

Si esto parece demasiado vago, ¿puede alguien mostrarme a qué apuntará cada registro durante la ejecución de exploits?

    
pregunta Sue Katty 11.07.2012 - 13:30
fuente

1 respuesta

8
  

¿ESP apuntará al inicio de los códigos de explotación (que serán algunas combinaciones de códigos de shell y gibbersih)?

En realidad, es el EIP que apuntará al inicio del código de explotación en lugar de ESP. En un desbordamiento de búfer de pila clásico, ESP seguirá estando donde debería haber estado con / sin código de explotación. Lo único que sobrescribe es el EIP que lo cambia a una dirección diferente en la memoria, donde ya ha "plantado" su código de explotación de alguna manera.

Para ilustrar, veamos el diagrama de una pila y observe los valores de varios registros:

Supongamosquehayunbúferexplotableenlafuncióndeldestinatariodondesepuedeproporcionarunacantidadarbitrariadedatos(get,rouguesrtcpy,etc.).Elatacantecalculaelnúmeroexactodebytesantesdellugarenlapiladondesealmacenaladirecciónderetorno(EIP).Porlotanto,laentradapodríaserdeforma(cadabloquecorrespondienteacadalínearojaacontinuación).

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0834FD4C

donde0834FD4CeselnuevopunterodeinstruccionesqueelatacantedeseaplantarenlaubicacióndeEIPguardadaylasAanterioressonsolopadsparallegaralEIP(recuerdequelapilacrecehaciaabajo).

Despuésdeldesbordamiento,digamosquelapilaseveasí:

En este punto, el atacante ha plantado con éxito el nuevo EIP. Cada vez que la función de llamada vuelve, la instrucción ret abrirá el EIP guardado (ahora 0x0834FD4C) en el registro % eip y el flujo de control se reanudará desde esta dirección de memoria y comenzará a ejecutar las instrucciones que encuentre allí. . Una vez más, el atacante debe asegurarse de que ha plantado el código de explotación en esta ubicación de antemano.

Enviar retorno de la persona llamada:
EBP : puede cambiar o no puede cambiar según lo que el atacante proporciona en los datos del búfer desbordado. Recuerde que, dado que tiene que aprobar EBP antes de llegar a EIP, ciertamente también tendrá que proporcionar un valor para EBP. En general, el atacante será lo suficientemente diligente como para enumerar la pila para determinar el EBP actual y colocarlo en la carga útil para que permanezca igual que antes. Por ejemplo. él podría (y debería) proporcionar algo como:

AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA 082376ED 0834FD4C

Donde 082376ED es el EBP existente. Esto asegurará que no se cambie a un valor arbitrario en la misión para sobrescribir el EIP.

EIP : se cambia al nuevo valor

ESP : volverá al mismo valor, independientemente de la saturación del búfer o no.

Entonces, una vez que la función regrese, vivirás en el marco de la pila de la persona que llamó antes, pero estarás ejecutando algún otro código.

Aplastar la pila por diversión y ganancias es una excelente fuente de información adicional.     
respondido por el CodeExpress 11.07.2012 - 19:48
fuente

Lea otras preguntas en las etiquetas