Usando un overflow del buffer off-by-one posso manipolare EIP per eseguire il codice situato al di fuori del programma di destinazione?

1

Questo è per una classe Computer e Network Security. Non sto chiedendo la soluzione, piuttosto solo un puntatore nella giusta direzione.

Il programma di destinazione ha una vulnerabilità off-by-one ed è compilato in modo che ebp non venga inserito nello stack. Attaccando la vulnerabilità, sono in grado di modificare l'ultimo byte di eip e inviare effettivamente il programma a qualsiasi istruzione nel programma.

La mia domanda è, se inserisco un codice dannoso nel programma di exploit (che chiama il programma di destinazione tramite execve ), posso modificare eip in modo che punti a questo codice dannoso, oppure il runtime è abbastanza intelligente per sapere che sto tentando di eseguire codice che si trova al di fuori dei limiti del programma di destinazione e quindi non lo consente?

L'ambiente è una VM Debian Etch ridotta senza ASLR, ecc. Il programma di destinazione ha setuid impostato su root, quindi il mio obiettivo è far sì che il programma di destinazione esegua le istruzioni che aprono una shell (dandomi la shell di root ).

    
posta xbonez 30.01.2013 - 23:08
fonte

1 risposta

5

È un computer , non può essere intelligente.

Dal punto di vista del kernel, lo spazio di memoria è suddiviso in pagine (in genere 4 kB per pagina). Ogni pagina ha diritti di accesso , come "può essere scritto su", "può essere letto", "può essere eseguito" o "non accessibile / non qui". Il kernel non si preoccuperà in alcun modo finché si salta in una pagina che è contrassegnata come "può essere eseguita". Se modifichi solo il byte meno significativo di eip , cadrai nella stessa pagina del chiamante originale, quindi il salto sarà permesso. Ovviamente, se salti in byte che non hanno senso come istruzioni, le cose andranno inacidite abbastanza velocemente ...

(Nota: su CPU x86 a 32 bit, con i soliti sistemi operativi, potrebbe non esserci differenza tra "può leggere" e "può eseguire" per le pagine, è una stranezza del Memory Management Unit utilizzato nella prima CPU x86 a 32 bit.)

    
risposta data 30.01.2013 - 23:21
fonte

Leggi altre domande sui tag