Perché aggiungere una slitta di nop alla fine dello shellcode?

2

Stavo cercando di sfruttare un overflow del buffer nel modo seguente:

NOP sled -> shellcode -> address of NOP sled (before it was save RIP)

Ma mi è stato detto su Stack Overflow che dovrei anche aggiungere una slitta NOP al mio shellcode:

NOP sled -> shellcode ->address of NOP sled -> NOP sled.

Qualcuno può spiegarmi perché dovrei aggiungere una slitta NOP al mio shellcode?

Questo è il mio post originale su Stack Overflow:

link

Grazie.

EDIT: ho letto un altro post in cui qualcuno ha avuto lo stesso problema.

Ha risolto questo problema aggiungendo una piccola slitta NOP dopo lo shellcode. Dato che lo shellcode è stato aggiunto allo stack alla fine del buffer, e inserisce alcune cose nello stack stesso, stava sovrascrivendo il proprio codice.

Ma non capisco come un'istruzione push possa far sì che lo shellcode sovrascriva il proprio codice.

    
posta S7_0 11.08.2016 - 18:28
fonte

1 risposta

1

Ci sono due ragioni per questo per quanto ne so

  • La lunghezza del buffer overflow potrebbe essere un numero molto specifico e il tuo codice shell potrebbe non occupare l'intero buffer. Ad esempio se il tuo buffer deve essere esattamente 400 byte ma il tuo shellcode è solo 312 allora devi inserire 88 byte di valore nops per assicurarti la lunghezza corretta.
  • Lo shellcode può richiedere un po 'di spazio per "espandersi". Solitamente si può fare a meno di aggiungere alcuni nops extra alla fine del buffer, ma mi è sempre stato insegnato che lo shellcode dovrebbe avere un po 'di padding alla fine per un'esecuzione corretta.
risposta data 11.08.2016 - 19:20
fonte

Leggi altre domande sui tag