Ejecutar código nativo desde shell en un sistema de archivos de solo lectura

6

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 sea mmap -able)
  • Use dd of=/proc/self/mem para clobber la pila de dd (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?

    
pregunta J. Doe 13.04.2017 - 20:13
fuente

1 respuesta

2
  

Encuentre un programa con una vulnerabilidad en el manejo de los argumentos de la línea de comandos o del entorno (no hay nada hasta ahora)

Esta es probablemente la avenida más prometedora.

En mi caso, finalmente pude encontrar un desbordamiento de búfer en el manejo de un parámetro no documentado de una utilidad propietaria personalizada.

    
respondido por el J. Doe 14.04.2017 - 06:08
fuente

Lea otras preguntas en las etiquetas