/ / Non ottenere la shell di root quando si esegue lo sfruttamento dell'overflow del buffer - linux, bash, buffer-overflow

Non ottenere la shell di root quando si fa uno sfruttamento dell'overflow del buffer - linux, bash, buffer-overflow

Sto imparando gli exploit di overflow del buffer in Linuxbinari x86. Sto facendo uno stack classico per creare una shell di root in una macchina virtuale Ubuntu 12.04 disabilitando ASLR e compilando il file binario disabilitando il bit NX e lo stack.

Durante la mia esecuzione, l'indirizzo di ritorno viene sovrascritto e lo shellcode viene eseguito, ma non ricevo la shell di root, ma risulta in una shell bash.

Per mitigare la protezione bash, sto usando la shell zsh e ho rimosso il link simbolico sh-> bash e creato un collegamento simbolico di sh con shell zsh nella directory / bin

Ho provato con un binario abilitato setuid di proprietà di root (esegui il permesso per altri utenti), ma ancora non ho la root shell.

Ho verificato il mio codice shell con il programma C ementre compilando il programma di test (del mio codice shell) ed eseguendolo dopo averlo abilitato setuid. quindi il programma di test sta dando la shell di root. Ma non sono in grado di ottenere la shell di root quando viene utilizzato lo stesso shellcode con buffer overflow.

Quando eseguo il debug di questo scenario in gdb, durante l'overflow / bin / zsh4 viene eseguito ma risulta in una shell bash.

Anche io non sono in grado di ottenere root shell con aritorna anche all'attacco di libc. Ciò si traduce anche in una shell bash. Ho provato questi passaggi in Ubuntu 12.04, Ubuntu 11.04 e Ubuntu9 ma il risultato è lo stesso.

Sono principiante in questo settore. Quindi potrebbero esserci degli errori che ho fatto in uno dei passaggi precedenti. Quindi qualcuno di voi potrebbe consigliare quale potrebbe essere il possibile problema e come risolverlo

risposte:

3 per risposta № 1

Finalmente ho capito il motivo di questo errore.

Durante la mia esecuzione il mio privilegio di root è stato eliminatoperché avevo disattivato ptrace del livello del sistema di elaborazione per lavorare su un altro strumento. Avevo sovrascritto il valore / proc / sys / kernel / yama / ptrace_scope a 0. Questo era il motivo per cui non ricevevo root shell per me.

Ho trovato questa informazione dalla pagina man di execve (che stavo usando per creare shellcode):

Se il bit ID utente set è impostato sul programmafile indicato da nomefile e il file system sottostante non è montato su nosuid (il flag MS_NOSUID per mount (2)) e il processo chiamante no essendo precostituito, allora l'ID utente effettivo del processo chiamante è cambiato a quello del proprietario del file di programma. Allo stesso modo, quando il bit ID del gruppo di impostazioni del file di programma è impostato come ID di gruppo effettivo del processo chiamante è impostato sul gruppo del file di programma.

Così ora, quando non disabilito ptrace_scope, sto ottenendo una shell di root.

Grazie a merlin2011 e naab per essere parte di questa discussione.