Il contesto:
Ho una piccola domanda riguardante ESP e violazione di accesso. Ho appena sfruttato un buffer overflow, con poco spazio dopo ESP. Così ho fatto questo:
parte 1: NOP SLED
parte 2: il mio shellcode: un carico utile reverse_tcp codificato shikata_ga_nai, da metasploit
parte 3: qualche altro NOP per riempire lo spazio
parte 4: 4 byte sovrascrivendo l'EIP salvato nello stack. Questo è l'indirizzo di un'istruzione ESP di salto in un segmento non protetto da ASLS.
parte 5: [Questo è il punto in cui l'ESP punta al momento dello schianto] Ho alcuni NOP
parte 6: la prima fase del mio exploit:
per il primo stadio, evitando \ x00 byte, l'ho fatto:
mov eax,esp
sub eax,944 (point to the part1 : the NOP sled)
jmp eax
Ha funzionato bene: stack viene sovrascritto, EIP va all'istruzione jmp ESP, arriva nella parte 6 dell'exploit, salta a EAX, che punta alla parte 1 dell'exploit, e quindi esegue il NOP per arrivare allo shellcode.
problema: ho ricevuto alcune violazioni di accesso all'interno del decodificatore shikata_ga_nai.
L'ho risolto aggiungendo un esp esp, eax nella prima fase:
mov eax,esp
sub eax,944 (point to the part1 : the NOP sled)
mov esp,eax
jmp esp
E ha funzionato come un fascino. Ciò significherebbe che non si può giocare con la memoria in indirizzi inferiori a ESP.
La domanda:
ESP ha davvero qualcosa a che fare con il permesso di lettura / scrittura dentro (al di fuori effettivamente) lo stack? La memoria è stata assegnata, quindi l'ho usata. EBP o altro registro ha nulla a che fare con la violazione di accesso?