Estoy investigando un dispositivo integrado que ejecuta Linux, busybox y algunos servicios personalizados. He encontrado una forma de obtener acceso a la shell sin privilegios y tratar de ver si es posible escalar privilegios.
El kernel es antiguo y parece vulnerable, sin embargo, el mayor obstáculo es que todo el sistema de archivos es de solo lectura (incluidos /tmp
y /dev/shm
), es decir, 644/755 y todo es propiedad de root.
¿Cuáles son algunas formas posibles de ejecutar código nativo personalizado en un sistema de archivos de solo lectura, con solo acceso de shell?
Algunas posibles vías que he probado:
- Obtenga el sistema para montar su sistema de archivos (requiere acceso raíz o físico)
- Haga que el sistema guarde un binario ELF en algún lugar del sistema de archivos, luego ejecute
/lib/ld-linux.so.2
con él (no pudo encontrar una manera de hacer esto) - Ejecutar
/lib/ld-linux.so.2
con una canalización o/proc/self/environ
(no funciona,ld-linux
requiere que el archivo seammap
-able) - Use
dd of=/proc/self/mem
para clobber la pila dedd
(el núcleo es anterior a 2.6.39, donde la escritura en/proc/self/mem
está deshabilitada) - Encuentre un programa con una vulnerabilidad en el manejo de los argumentos de la línea de comandos o del entorno (hasta ahora)
- Encuentre un lenguaje de scripting capaz de hacer syscalls (la única instalación de scripting es el shell de busybox)
- Escriba en un socket UNIX y haga que el servicio lo escuche para hacer algo (no existe ninguna utilidad en el sistema de archivos que permita enviar datos arbitrarios a los sockets UNIX)
¿He pasado por alto algo?