Linux
Enumeración básica
Abusando de grupos
Comprobar rutas importantes
Enumeración automatizada
Linux Smart Enumeration: https://github.com/diego-treitos/linux-smart-enumeration
Abuso permisos sudo
Si nos encontramos con env_keep+=LD_PRELOAD en el sudo -l podríamos hacer que cualquier programa utilice librerías compartidas, para saber como explotarlo accede a este link
Abuso permisos SUID
Encontrar carpetas/archivos que podemos escribir
Enumerar tareas en proceso (cronjob)
Monitorizador comandos script bash
Abuso Capabilites
Bypass restricted bash
NFS
NFS (Network File System) es un protocolo de red utilizado para compartir sistemas de archivos entre computadoras. En el contexto de la escalada de privilegios en Linux, NFS puede ser utilizado como una técnica para obtener acceso a archivos o directorios que no son accesibles por defecto para un usuario sin privilegios.
Y se encuentra en este archivo:
El elemento crítico para este vector de escalada de privilegios es la opción "no_root_squash" que puede ver arriba. De forma predeterminada, NFS cambiará el usuario raíz a nfsnobody y eliminará cualquier archivo para que no funcione con privilegios de raíz. Si la opción "no_root_squash" está presente en un recurso compartido grabable, podemos crear un ejecutable con el conjunto de bits SUID y ejecutarlo en el sistema de destino.
Primero tenemos que enumerar los recursos compartidos montables de la máquina victima:
Montaremos un recurso compartido "no_root_squash" en nuestra máquina local
Creamos un script con C con una /bin/bash y que nos de root cuando se ejecute en la victima
Lo compilamos y le damos permisos SUID
No hace falta transferirlos por qué ya está en la máquina victima ya que hemos estado trabajando en ella mediante un recurso compartido.
Lo ejecutamos y somos root
Kernel exploits
Consejos
Se muy especifico a la hora de buscar la version del kernel en exploitdb,google o searchsploit.
Entiende muy bien el exploit antes de ejecutarlo, a veces se tienen que modificar.
Puede que el script se tenga que interactuar en el futuro así que cuidado.
Para traspasar el exploit a la máquina victima, como siempre la carpeta /tmp y en tu máquina abres un servidor
python3 -m http.server 9000
Si creemos que puede que el sistema comprometido es vulnerable de kernel, como un script que no sea de ese mismo kernel lo ejecutemos en el sistema puede romperlo.
Para asegurarnos tenemos LES (Linux Exploit Suggester) que nos ayudará a saber cual es el CVE correcto para ejecutar.
Analizar archivos
Path Hijacking
Si nos encontramos un binario con SUID podemos hacer un path hijacking, pero como se hace?
Primero hay que entender que es un $PATH, cuando hacemos echo $PATH sale lo siguiente:
Cuando nosotros ejecutamos un comando como curl, lo busca en el $PATH, primero va a ir /usr/local/sbin y si no encuentra ahí el curl va al --> /usr/local/bin y si tampoco va al --> /usr/sbin y así sucesivamente. Por eso por ejemplo si ejecutamos "auqdqoy" nos sata un error, porque en ninguna de las rutas encuentra ese comando
La cosa viene aquí, nosotros podemos modificar el path temporalmente, y de aquí viene el path hijacking, ponemos la ruta que queremos al principio del $PATH para así engañar al sistema, también el problema es que el binario donde llamamos a curl, ese comando lo hace de forma relativa y no absoluta, para que no se pueda hacer un path hijacking basta con que a la hora de programar se ponga la ruta abosluta, a continuación veremos un ejemplo de lo que es una ruta absoluta y relativa:
Ejemplo de absoluta y relativa
Absoluta --> /usr/bin/curl
Relativa --> curl
Ejemplo Path Hijacking
Hay un binario llamado statuscheck que tiene permisos SUID
Lo ejecutamos y vemos que lo que hace por detrás es hacer un
curl -I http://localhost
es decir que pide la cabecera del local host.
Una vez sabido esto, ¿Cómo podemos saber que ejecuta por detrás el binario?
Fácil, con un comando que se llama strings, podemos analizar el binario.
Aquí vemos que haciendo strings <binario> vemos que ejecuta
curl -I http://localhost
por detrás.
Sabiendo esto, vamos a hacer el path hijacking.
Creamos en la carpeta /tmp un archivo que se llame igual que curl y le ponemos que nos ejecute una shell con privilegios (parámetro -p) y le damos permisos de ejecución con chmod +x <archivo> por que sino no funcionará.
Modificamos el $PATH temporalmente con la siguiente comanda
Si ahora miramos el $PATH veremos como al principio de todo saldrá /tmp
Lo siguiente sería ejecutar el binario y en principio nos dará una shell como root, y habremos escalado privilegios.
Añadir un usuario al /etc/passwd
Este comando generará un hash en formato md5 para un usuario en especifico y le añade salt para que sea incrackeable.
-1
Utiliza el algoritmo de hash MD5.
-5
Utiliza el algoritmo de hash SHA256.
-6
Utiliza el algoritmo de hash SHA512.
-salt
Permite especificar una cadena de sal para el usuario.
-in
Especifica un archivo de entrada para el que se desea generar un hash de contraseña.
-stdin
Lee la contraseña de la entrada estándar en lugar de solicitarla al usuario.
-noverify
No verifica la contraseña al crear el hash.
-help
Muestra una lista de opciones disponibles para el comando.
Vamos al /etc/passwd y añadimos al final de la linea lo siguiente
Crackear passwords de /etc/passwd - /etc/shadow
Si fuera el caso de que tenemos permisos de lectura y escritura al /etc/passwd y al /etc/shadow una vez comprometido, y queremos saber las passwords de los demás usuarios, tendriamos que hacer el siguiente proceso
Poner en un archivo .txt el shadow y passwd
Una vez hecho hacer
unshadow passwd.txt shadow.txt > cracked.txt
Utilizar john con usuario generado
cracked.txt
y crackear los hashes que hayamos obtenido.
Last updated