Sto sperimentando attacchi di dirottamento del flusso di controllo su programmi scritti in C su Linux. Sto cercando di eseguire un semplice attacco ret-2-libc su un programma con la contromisura stack-No eXecutable attivata. Per questo scopo sto tornando alla funzione system()
con argomento /bin/sh
.Perché la shell return-to-libc che utilizza system() si chiude immediatamente?
Ma ho un problema: sebbene il mio attacco funzioni e una shell sia generata correttamente, la shell esce immediatamente dopo aver inserito il primo carattere! Cioè, la shell si chiude dopo aver premuto un tasto qualsiasi!
Questo comportamento è anche osservabile in questo semplice codice C:
int main() { system("/bin/sh"); return 0; }
compilo usando: gcc code.c -o system
perché è questo? E come posso ripararlo?
sto sperimentando sulla Ubuntu-9.04
con kernel 2.6.28
e glibc-2.9-1
Update: La shell diventa interattivo se e solo se la prima chiave che preme è Enter. Cioè, se il primo carattere che inserisco è un new-line
(\n
), la shell rimane aperta e diventa interattiva.
Così qualcuno può spiegare cosa sta succedendo qui?
Dato che è possibile riprodurre il problema con codice C standard e legittimo, questo non è correlato ai tentativi di exploit, quindi questa domanda è più adatta per Stack Overflow. –
@ AndréDaniel Vero; tuttavia questo non è molto simile a un problema di programmazione generale e gli esperti nel campo dello sviluppo di shellcode possono essere di aiuto. Così l'ho chiesto qui. –
Non riesco a riprodurlo con il tuo codice. È davvero l'unica cosa che fai lì? Come lo esegui? – StenSoft