dirección de 3 bytes de la llamada del sistema y la llamada de salida [cerrado]

0

¿Estoy tratando de explotar una vulnerabilidad de desbordamiento de búfer en ubuntu (versión 3.0.0-12 genérica i686 del kernel) usando el método de retorno a libc y la pila no está explotando?

Al explotar, descubrí que la dirección de la llamada al sistema y la llamada a la salida es de un byte de tamaño 3, por lo que creo que no puedo explotar la pila de la manera adecuada. ¿Puede alguien ayudarme? ¿Cómo puedo averiguar esto? Debo agregar un 0x00 en la dirección

    
pregunta user38257 25.05.2014 - 16:17
fuente

1 respuesta

1

No estoy seguro de qué quiere decir con "la dirección es de 3 bytes" (a menos que esté en un sistema de 24 bits). :) Las direcciones de memoria son probablemente de 32 bits (4 bytes), pero las direcciones probablemente tienen una Byte nulo en ellos, por lo que desea una forma de introducir un byte nulo en su código de shell.

Lo que puedes hacer es un bit-shift en un registro. Esto, como su nombre lo indica, desplazará los bits a la dirección que desee; Justo en este caso, y rellenar con ceros. (0x11223344 - > 0x00112233)

El siguiente código convertirá EAX en 0x00112233

05 44 33 22 11    add    $0x11223344,%eax
c1 e8 08          shr    $0x8,%eax

Y como se puede ver en los códigos hexadecimales, no se ha introducido ningún byte nulo en el código de shell.

Alternativamente, puede trabajar con registros inferiores (ax, al, ...) y girar todos los bits alrededor. De usted puede calcular el valor inverso utilizando un NO bit a bit, por ejemplo: 0xffedcba9 es el valor NO a nivel de bit de 0x00123456. O podrías XOR 2 valores para llegar a tu dirección.

    
respondido por el ndrix 03.06.2014 - 08:07
fuente

Lea otras preguntas en las etiquetas