¿Es posible escribir un valor mayor a 64 bits usando un ataque de cadena de formato (% n)?

1

Actualmente estoy explorando los ataques de cadena de formato. Sin embargo, el búfer en este ejemplo no está ubicado en la pila sino en el montón, por lo que el enfoque más común no funciona y mis opciones de direcciones que puedo sobrescribir parecen ser limitadas. Supongamos que necesito escribir en 0x18 pero la dirección más cercana que puedo usar con% n es 0x10. ¿Es posible configurar una cadena de formato que me permita llenar la memoria hasta que llegue a la ubicación correcta y luego escriba un valor arbitrario?

El compilador utilizado es GCC 5 en Debian OS x86-64.

    
pregunta Calyx 26.01.2018 - 23:17
fuente

1 respuesta

1

Suponiendo que lo que quiere decir es que desea escribir en la mitad de su dirección de 64 bits, ya que en un sistema de 64 bits podría crear una matriz de 8 bytes y agregarlos a un largo sin firmar. tipo de código sudo:

//get the pointer to the nearast address
unsigned long long * datapointer = 0x18;
//get all the data from the smallest adressible chunk for your system, in this case 64 bits
unsigned long long data = &(datapointer);
//some values of individual bytes you want to override
uchar a = 0x23;
ucahr b = 0x99;
...
//clear out the bytes you want to change
data = data & (data mask to be overidden);
//change the desired bytes with the desired values
data = data | a << (byte number for a in bits);
data = data | a << (byte number for b in bits);
//override the data chunk    
&datapointer = data;
    
respondido por el noone392 27.01.2018 - 01:59
fuente

Lea otras preguntas en las etiquetas