Ho cercato molto e non ho trovato nulla. Mi chiedo ancora: è importante in quale lingua scrivi shellcode? Lo shellcode in Assembly, C, ecc. Funziona ovunque possa essere usato ed è buono come l'altro?
Ho cercato molto e non ho trovato nulla. Mi chiedo ancora: è importante in quale lingua scrivi shellcode? Lo shellcode in Assembly, C, ecc. Funziona ovunque possa essere usato ed è buono come l'altro?
Il termine "shellcode" deriva dal fatto che viene tipicamente usato per ottenere l'accesso alla shell sulla macchina. Nella maggior parte dei casi, lo shellcode viene utilizzato quando esiste una vulnerabilità basata sulla corruzione della memoria (ad es. Overflow del buffer) in cui l'autore dell'attacco è in grado di scrivere su parti di memoria che verranno eseguite o che verranno eseguite. Questo deve essere codice macchina, poiché viene eseguito direttamente dalla CPU.
Poiché lo spazio sul buffer è spesso limitato, lo shellcode è spesso progettato per essere il più breve possibile, quindi viene spesso scritto a mano in assembly e scaricato in una sequenza byte sfuggita (ad esempio "\ x23 \ xa4 \ x00" ). È possibile scrivere un programma in C, compilarlo, quindi eseguire il dump dei byte come sopra, ma il compilatore C può introdurre complessità inutili e aggiungere ulteriore lunghezza. Di solito, lo shellcode sarà breve e potrebbe essere estratto da un secondo stadio dalla rete se si desidera un carico utile più lungo.
In breve, è necessario il codice macchina, e non importa se questo codice proviene da C o da un assembly, eccetto ciò che è stato detto sopra. Tuttavia, la definizione di shellcode è un po 'allentata e potrebbe essere applicata anche ai linguaggi interpretati (ad esempio ottenere una shell sfruttando una chiamata non salvata a eval () in un'applicazione Python), sebbene in genere non sia la parola scelta in questi casi.
Leggi altre domande sui tag programming shellcode