NOPS in Metasploit

13

Problema

Non so cosa sia un "NOP" in Metasploit Framework o in altro modo.

Quello che so

Metasploit Unleashed dice: "I Nops mantengono costanti le dimensioni del payload". Alcuni post delle domande menzionano i buffer overflow.

Cosa vorrei sapere

Perché Nops mantiene coerenti le dimensioni del payload? In che modo i NP mantengono le dimensioni del carico utile coerenti con? Cos'è un Nop, esattamente? Un acronimo? Uno pseudonimo? Sta per qualcosa di più lungo?

Un "nop" è un processo o dati? (Ad esempio: "esegui" un nop, o "mandi" un nop?) Perché li chiamano "slitte" e "slitte"? (Suppongo che entrambi questi nomi si riferiscano alla cosa con cui scivoli giù per le colline durante l'inverno, il che sembra implicare che un "nop" lubrifica in qualche modo una sorta di transazione di dati)

Dove ho già cercato risposte

link

link

link

link

link

link

    
posta gal 07.02.2013 - 23:04
fonte

1 risposta

14

Nel codice assembly, NOP è l'abbreviazione di No OPeration. Questo è più noto per i chip x86 come 0x90 . Quando un processore carica quella istruzione, semplicemente non fa nulla (almeno utile) per l'unico ciclo e poi fa avanzare il registro all'istruzione successiva.

NOPs keep the payload sizes consistent

... assicurando che qualsiasi spazio non utilizzato da altro codice sarà comunque validamente eseguibile dal processore senza effetti collaterali. Questa " slitta NOP " è anche la fonte di nomi umoristici come i vincitori del DEFCON 19 CTF Team Nopsled europeo .

L'importanza pratica di questo ha a che fare con l'istruzione di scrittura salta . I salti possono essere di salto relativo (leggere la memoria 8 byte prima di dove ci si trova ora) o di un salto assoluto (leggere la memoria che si trova nella posizione 0x874710). Se si spostano i dati con un salto assoluto, è necessario ricodificare qualsiasi riferimento ad essi. Se si sposta un'istruzione in giro rispetto a un'altra, è necessario anche ricodificare i salti relativi. Mettere NOPs semplifica il problema perché un salto che finisce in una serie di NOP continuerà con la prima istruzione eseguibile e impedirà al processore di leggere un codice non valido che fermerebbe l'esecuzione e manderà in crash il software.

Molto spesso, se sai che il puntatore per lo stack punterà da qualche parte in un intervallo continuo di indirizzi di memoria, lo riempirai con NOP e poi inserirai il tuo codice.

Dai un'occhiata a questo tutorial per la scrittura di shellcode che spiega quando utilizza i NOP per ottenere una migliore comprensione.

    
risposta data 07.02.2013 - 23:10
fonte

Leggi altre domande sui tag