Sto lavorando alla mia tesi di scuola.
Sto cercando di iniettare alcuni shellcode in una libreria condivisa usando la vulnerabilità di Dirty Cow su Android x86.
Il mio shellcode è scritto in asembly e chiama solo sys_execve
con un argomento touch /sdcard/FILE.txt
. Lo shellcode dovrebbe essere OK, non sto usando nessun indirizzo assoluto per gli argomenti della stringa - tutto viene creato nello stack e indirizzato relativamente al puntatore dello stack. Sto cercando di iniettare questo shellcode in libc.so
(nella funzione time
), che penso abbia esito positivo - prima di questo ho provato uno shellcode più semplice che ha funzionato perfettamente ( xor eax, eax; ret
).
Ma subito dopo l'attacco il programma fallisce:
01-29 15:56:40.305 3255-3255/com.example.vitek.bakalarka A/libc: Fatal signal 11 (SIGSEGV) at 0x00000000 (code=128), thread 3255 (vitek.bakalarka)
E quando provo a comunicare con il dispositivo tramite adb
, ottengo solo questo:
$ adb shell ls -la /sdcard/
CANNOT LINK EXECUTABLE: could not load library "libcutils.so" needed by "/system/bin/touch"; caused by library "libcutils.so" not found
Non capisco perché fallisce. Ho pensato che il syscall execve
crea un sottoprocesso che esegue qualunque cosa ottiene come argomento.
Perché non carica la libreria libcutils.so
?
Posso aggiungere qualcosa al mio shellcode per far funzionare questo attacco? In caso contrario, c'è qualche altro bersaglio adatto che sarebbe più facile da attaccare?
Ho visto alcuni PoC di Dirty Cow che stavano attaccando vDSO
, ma nel mio caso vDSO
non è usato dal sistema - Ho provato a iniettare anche quello, ha funzionato perfettamente (l'ho visto in objdump
e hexdump
delle pagine vDSO
che ho scritto in un file), ma la funzione che ho attaccato ( clock_gettime
) sembra non essere mai chiamata (o dal sistema o direttamente da me).
Grazie per le risposte.