È possibile scrivere un valore superiore a 64 bit utilizzando un attacco di stringa formato (% n)?

1

Attualmente sto esplorando gli attacchi con stringhe di formato. Tuttavia, il buffer in questo esempio non si trova nello stack ma nell'heap, quindi l'approccio più comune non funziona e le mie opzioni di indirizzi che posso sovrascrivere sembrano essere limitate. Supponiamo di dover scrivere su 0x18 ma l'indirizzo più vicino che posso usare con% n è 0x10. È possibile impostare una stringa di formato che mi consenta di riempire la memoria finché non raggiungo la posizione corretta e poi scrivo un valore arbitrario?

Il compilatore utilizzato è GCC 5 su Debian OS x86-64.

    
posta Calyx 26.01.2018 - 23:17
fonte

1 risposta

1

assumendo ciò che intendi è che vuoi scrivere nel mezzo dell'indirizzo a 64 bit, perché su un sistema a 64 bit potresti semplicemente creare array a 8 byte e aggiungerli a un long lungo non firmato tipo di codice 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;
    
risposta data 27.01.2018 - 01:59
fonte

Leggi altre domande sui tag