¿Cómo listar todos los archivos con solo la ruta arbitraria de archivos leída, pero sin listado de directorios ni sudo?

8

He encontrado una vulnerabilidad de recorrido de ruta que me permite leer cualquier ruta en el servidor que no requiera sudo .

Para aprovechar al máximo esto, me gustaría saber qué archivos existen en cada directorio para poder leerlos.

En otras palabras, puedo hacer cat /any/path , pero no ls /any/path ni sudo cat /any/path . Entonces, ¿cómo puedo encontrar tantos archivos como sea posible para cat them (sin probar todas las posibilidades ...)

La lectura de archivos especiales como dev o proc, o los archivos presentes en la mayoría de las distribuciones de Linux está bien. Por ejemplo, si pudiera leer la base de datos locate s /var/lib/mlocate/mlocate.db , el problema se resolvería, pero no puedo porque no tengo sudo .

Si no hay una respuesta ideal que enumere todos , también me interesan las respuestas que enumeran una gran cantidad de archivos existentes.

En este caso en particular, el recorrido ocurre dentro de una VM remota, por lo que el objetivo principal no es el objetivo principal: lo que me interesa es el código fuente confidencial que se puede encontrar en la VM. Pero las rutas de escalada de privilegios muy comunes también son bienvenidas, ya que nos darían mlocate y resolverían el problema, además de ser directamente útiles en otros sistemas.

Más precisamente, el sistema en mi caso es una compilación en el servicio Git push análogo a las páginas GitHub / GH (asumiendo que cada compilación Jekyll se ejecuta en VM, lo cual no sé). Mencionar esto porque ya lo han solucionado los proveedores, por supuesto :) Soy yo quien crea el repositorio de Git: ese es el vector de ataque, por lo que leer el repositorio de Git no es muy interesante.

    
fuente

2 respuestas

5

Puede probar otras implementaciones de localización que indexan archivos accesibles en todo el mundo en un índice legible para el mundo, que generalmente se encuentra en /var/lib/locate/locatedb o /var/cache/locate/locatedb o algo similar.

No veo mucha necesidad de lista de archivos para escalar su acceso en un servidor típico. Por lo general, usted sabría qué aplicación está atacando y recupera sus archivos de configuración y su base de datos y obtiene las credenciales de esta manera. Puede probar archivos como .netrc , .ssh/id_rsa y .ssh/config para ver si la cuenta puede ser una puerta de entrada a otras cuentas. Si no está seguro de lo que se está ejecutando en la caja, intente muchos y muchos nombres de archivos plausibles.

Lo único que es un poco largo de agotar es los valores PID, para explorar lo que se está ejecutando. Se requieren 32 mil solicitudes para agotar pid_t en Linux de forma predeterminada, y puede verificar el valor máximo en /proc/sys/kernel/pid_max . La línea de comando está en /proc/PID/cmdline ; no puedes ver la lista de archivos abiertos (necesitas readlink para eso) pero puedes ver su contenido ( cat /proc/PID/fd/0 ...).

Para el caso específico de un servicio de compilación, verifique los archivos de configuración de ese servicio. Eso debería ayudarte a localizar el repositorio git. Si ha podido localizar un checkout de git, busque en .git/index y .git/logs/HEADS y quizás en otros archivos en .git/logs (experimente con ese servicio para ver qué sucursales se usan y qué operaciones usa). Esto debería permitirle recuperar las ID de objetos que luego puede leer desde .git/objects .

Aparte de encontrar una base de datos de localización, no puedo pensar en una manera de elevar el acceso de los archivos de lectura a los archivos de lista con una configuración típica.

    
respondido por el Gilles 26.12.2014 - 01:11
fuente
0

En algunas versiones de Unix (especialmente las más antiguas), usted puede ser capaz de cat directorios ellos mismos; por ejemplo, cat /any o incluso cat / . El resultado será un archivo binario cuyo formato es diferente en diferentes versiones de Unix, pero que siempre contendrá los nombres de todas las entradas en el directorio (comenzando con . y .. ) y sus números de inodo (en forma binaria). Así, por ejemplo, la salida de cat / incluirá any , etc.

Consulte ¿Cuándo dejaron de ser legibles los directorios como archivos?

    
respondido por el Scott 26.12.2014 - 23:27
fuente

Lea otras preguntas en las etiquetas