Sto facendo ricerche su un dispositivo incorporato che esegue Linux, busybox e alcuni servizi personalizzati. Ho trovato un modo per ottenere l'accesso alla shell senza privilegi e provare a vedere se è possibile scalare i privilegi.
Il kernel è vecchio e sembra vulnerabile, tuttavia il più grande ostacolo è che l'intero filesystem è di sola lettura (incluso /tmp
e /dev/shm
), cioè 644/755 e tutto è di proprietà di root.
Quali sono alcuni modi possibili per eseguire codice nativo personalizzato su un filesystem di sola lettura, avendo solo accesso alla shell?
Alcune possibili strade che ho provato:
- Ottieni il sistema per montare il tuo filesystem (richiede accesso root o fisico)
- Ottieni il sistema per salvare un file binario ELF da qualche parte sul filesystem, quindi esegui
/lib/ld-linux.so.2
con esso (non è stato possibile trovare un modo per farlo) - Esegui
/lib/ld-linux.so.2
con una pipe o/proc/self/environ
(non funziona,ld-linux
richiede che il file siammap
-able) - Usa
dd of=/proc/self/mem
nello stack di clobberdd
(il kernel è pre-2.6.39, dove la scrittura su/proc/self/mem
è disabilitata) - Trova un programma con una vulnerabilità nella gestione degli argomenti della riga di comando o dell'ambiente (nulla fino ad ora)
- Trova un linguaggio di scripting in grado di creare syscalls (l'unica possibilità di scripting è la shell di busybox)
- Scrivi su un socket UNIX e ascolta il servizio su di esso per fare qualcosa (non esistono utility sul filesystem che permettano l'invio di dati arbitrari ai socket UNIX)
Ho trascurato qualcosa?