> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/post-exploitation/linux-persistence.md).

# Persistencia en Linux

La persistencia es la fase posterior a la explotación en la que el acceso se vuelve repetible después del primer shell. En compromisos reales, use estas técnicas solo cuando estén explícitamente dentro del alcance, documente cada cambio y elimine toda persistencia antes de cerrar la prueba.

{% hint style="warning" %}
La persistencia modifica cuentas de usuario, rutas de inicio de sesión, tareas programadas, archivos de inicio o raíces web. Trate cada comando como una acción de laboratorio o de una evaluación autorizada y mantenga una nota de limpieza para cada cambio que realice.
{% endhint %}

## Mapa rápido

| Método                             | Mejor uso                                                                                  | Evidencia principal                                                    |
| ---------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- |
| Manipulación de cuentas de usuario | Persistencia controlada en laboratorio o pruebas de recuperación.                          | `/etc/passwd`, `/etc/shadow`, `/etc/group`, fragmentos de sudoers.     |
| Claves autorizadas de SSH          | Acceso fiable basado en claves para un usuario conocido.                                   | `~/.ssh/authorized_keys`, permisos de archivo, registros de SSH.       |
| Tareas cron                        | Ejecutar comandos de validación benignos en un horario.                                    | `/etc/crontab`, `/etc/cron.d/*`, crontab del usuario.                  |
| Scripts de inicio                  | Ejecución después del reinicio o del inicio del servicio.                                  | `/etc/rc.local`, unidades systemd, archivos de perfil.                 |
| Perfiles de shell                  | Se activa al iniciar sesión de forma interactiva.                                          | `.bashrc`, `.profile`, `/etc/profile`.                                 |
| Validación de acceso web           | Confirmar de forma segura las raíces web escribibles y la ejecución del lado del servidor. | Archivo de la raíz web, registros de acceso, usuario del servidor web. |

## Manipulación de cuentas de usuario

Crear una cuenta controlada hace ruido, es fácil de detectar y, por lo general, solo es aceptable en laboratorios o cuando las reglas de enfrentamiento lo permiten explícitamente.

### Crear un nuevo usuario privilegiado

```bash
useradd -m -s /bin/bash assessment-user
usermod -aG sudo assessment-user
passwd assessment-user
```

Debian/Ubuntu:

```bash
adduser assessment-user sudo
```

CentOS/RHEL:

```bash
usermod -aG wheel assessment-user
```

### Modificar un usuario existente

```bash
usermod -s /bin/bash user
usermod -aG sudo user
echo "user ALL=(ALL:ALL) ALL" > /etc/sudoers.d/user
chmod 440 /etc/sudoers.d/user
passwd user
```

### Validar y limpiar

```bash
id assessment-user
groups assessment-user
sudo -l -U assessment-user
```

Limpieza:

```bash
deluser assessment-user sudo 2>/dev/null
userdel -r assessment-user
rm -f /etc/sudoers.d/user
```

## Persistencia SSH

La persistencia por clave SSH es más limpia que cambiar contraseñas, pero sigue siendo muy visible en la monitorización de integridad de archivos y en los registros de SSH.

### Claves autorizadas

Para un usuario normal:

```bash
mkdir -p /home/user/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EA... assessment-key" >> /home/user/.ssh/authorized_keys
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/authorized_keys
chown -R user:user /home/user/.ssh
```

Para root, solo cuando esté explícitamente autorizado:

```bash
mkdir -p /root/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EA... assessment-key" >> /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
```

### Puerto SSH secundario

Añadir un segundo puerto hace mucho ruido y debe documentarse claramente:

```bash
echo "Port 22" >> /etc/ssh/sshd_config
echo "Port 2222" >> /etc/ssh/sshd_config
systemctl restart sshd
```

Validación:

```bash
ss -tuln | grep ':22\|:2222'
ssh -i id_rsa user@target -p 2222
```

Limpieza:

```bash
sed -i '/Port 2222/d' /etc/ssh/sshd_config
systemctl restart sshd
```

## Persistencia con cron

La persistencia con cron es útil en laboratorios porque es fácil de demostrar y fácil de eliminar. En entornos reales, las tareas cron suelen estar monitorizadas.

### Cron a nivel de sistema

```bash
echo "* * * * * root /opt/assessment/validate-access.sh" >> /etc/crontab
```

### Cron del usuario

```bash
(crontab -l 2>/dev/null; echo "* * * * * /opt/assessment/validate-access.sh") | crontab -
```

### `/etc/cron.d`

```bash
echo "* * * * * root /opt/assessment/validate-access.sh" > /etc/cron.d/system-update
chmod 644 /etc/cron.d/system-update
```

Limpieza:

```bash
crontab -l | grep -v '/opt/assessment/validate-access.sh' | crontab -
rm -f /etc/cron.d/system-update
sed -i '/validate-access.sh/d' /etc/crontab
```

## Scripts de inicio

La persistencia de inicio se ejecuta después del arranque o durante la inicialización de la sesión/inicio de sesión.

### `rc.local`

```bash
cat > /etc/rc.local <<'EOF'
#!/bin/bash
/opt/assessment/validate-access.sh &
exit 0
EOF
chmod +x /etc/rc.local
```

### Perfiles de shell

Perfil del usuario:

```bash
echo "nohup /opt/assessment/validate-access.sh >/dev/null 2>&1 &" >> ~/.bashrc
```

Perfil global:

```bash
echo "nohup /opt/assessment/validate-access.sh >/dev/null 2>&1 &" >> /etc/profile
```

Limpieza:

```bash
sed -i '/validate-access.sh/d' ~/.bashrc
sed -i '/validate-access.sh/d' /etc/profile
rm -f /etc/rc.local
```

## Validación de acceso web

Una raíz web escribible puede proporcionar acceso repetible si el servidor ejecuta el código subido. No almacene cargas útiles de web shell activas en las notas; documente en su lugar la ruta, el runtime, la solicitud de validación, los registros y la limpieza.

### Patrón de documentación segura

| Campo                       | Ejemplo                                                                                             |
| --------------------------- | --------------------------------------------------------------------------------------------------- |
| Raíz web                    | `/var/www/html/` o `/srv/www/`                                                                      |
| Ruta escribible             | `/var/www/html/images/`                                                                             |
| Runtime                     | PHP, CGI de Python, ASPX, JSP                                                                       |
| Nombre de archivo de prueba | Un nombre de archivo de evaluación claramente marcado                                               |
| Solicitud de validación     | Una solicitud benigna que demuestre la ejecución del lado del servidor, como devolver el UID actual |
| Comando de limpieza         | Comando exacto de eliminación y rutas de registro a revisar                                         |

### Lista de verificación de despliegue

```bash
ls -la /var/www/ /srv/www/ 2>/dev/null
find /var/www /srv/www -type d -writable 2>/dev/null
find /var/www /srv/www -type f -mtime -1 -ls 2>/dev/null
```

La validación debe demostrar la ejecución con la acción menos invasiva posible y luego eliminar el archivo inmediatamente.

Limpieza:

```bash
rm -f /ruta/al/archivo-de-prueba-autorizado
find /var/www /srv/www -type f -mtime -1 -ls 2>/dev/null
grep -R "authorized-test" /var/log/apache2 /var/log/httpd /var/log/nginx 2>/dev/null
```

## Notas del informe

Registrar:

1. Método exacto de persistencia utilizado.
2. Rutas de archivo modificadas.
3. Usuario, grupo y permisos antes y después.
4. Comando de validación y resultado.
5. Comando de limpieza y confirmación.

## Lista rápida de limpieza

```bash
grep -R "assessment-key\|validate-access.sh\|authorized-test" /etc /home /root /var/www /srv/www 2>/dev/null
find /etc/cron* -type f -mtime -7 -ls 2>/dev/null
find /var/www /srv/www -type f -mtime -7 -ls 2>/dev/null
last
journalctl -u ssh -n 100 2>/dev/null
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/post-exploitation/linux-persistence.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
