File Transfer
Protected File Transfers
Durante una auditoría, muchas veces tenemos acceso a información sensible como listas de usuarios, credenciales (por ejemplo, al descargar el archivo NTDS.dit para crackeo offline), datos de enumeración que revelan detalles clave de la infraestructura de red o del entorno de Active Directory, entre otros. Por eso, es fundamental cifrar esa información o usar conexiones seguras como SSH, SFTP o HTTPS siempre que sea posible.
Sin embargo, a veces no tenemos acceso a esos canales cifrados y toca buscar otra forma de proteger los datos. En esos casos, cifrar los archivos antes de transferirlos es una buena práctica para evitar que puedan ser leídos si son interceptados.
File Encryption on Linux (OpenSSL)
Verify correct file content after transfer
Download Operations
Base64 Encoding / Decoding
nc && /dev/tcp
Netcat/nc
Wget
Curl
Fileless Attacks Using Linux
Debido a la forma en que funciona Linux y cómo operan las tuberías (pipes), la mayoría de las herramientas que usamos en Linux pueden ser utilizadas para replicar operaciones sin archivos, lo que significa que no necesitamos descargar un archivo para ejecutarlo.
Nota: Algunos payloads, como mkfifo
, escriben archivos en el disco. Ten en cuenta que, aunque la ejecución del payload pueda ser sin archivos cuando usas una tubería, dependiendo del payload elegido, puede crear archivos temporales en el sistema operativo.
Tomemos el comando cURL
que usamos, y en lugar de descargar LinEnum.sh
, lo ejecutaremos directamente utilizando una tubería.
Fileless Download with cURL
Fileless Download with wget
Download with Bash (/dev/tcp)
También puede haber situaciones en las que ninguna de las herramientas de transferencia de archivos más conocidas esté disponible. Siempre y cuando se tenga instalada una versión de Bash 2.04 o superior (compilada con --enable-net-redirections
), se puede utilizar el archivo de dispositivo incorporado /dev/TCP
para realizar descargas simples de archivos.
Connect to the Target Webserver
HTTP GET Request
Print the Response
SSH Downloads
SSH
(o Secure Shell) es un protocolo que permite el acceso seguro a computadoras remotas. La implementación de SSH incluye una utilidad SCP para la transferencia remota de archivos que, por defecto, utiliza el protocolo SSH.
SCP
(secure copy) es una utilidad de línea de comandos que permite copiar archivos y directorios entre dos hosts de manera segura. Podemos copiar nuestros archivos desde la máquina local a servidores remotos y desde servidores remotos a nuestra máquina local.
SCP
es muy similar al comando cp
o copy
, pero en lugar de proporcionar una ruta local, necesitamos especificar un nombre de usuario, la dirección IP remota o el nombre DNS, y las credenciales del usuario.
Enabling and Starting the SSH Server
Checking for SSH Listening Port
Ahora podemos comenzar a transferir archivos.
Linux - Downloading Files Using SCP
Nota: Puedes crear una cuenta de usuario temporal para transferencias de archivos y evitar usar tus credenciales principales o claves en un ordenador remoto.
Download Operations using Python
Python es un lenguaje de programación muy popular. Actualmente, se admite la versión 3, pero es posible que encontremos servidores en los que aún exista la versión 2.7 de Python. Python puede ejecutar comandos de una sola línea desde una línea de comandos del sistema operativo utilizando la opción -c. Veamos algunos ejemplos:
Python2
Python3
Download Operations using PHP
En el siguiente ejemplo, utilizaremos el módulo PHP file_get_contents()
para descargar contenido de un sitio web combinado con el módulo file_put_contents()
para guardar el archivo en un directorio. PHP se puede utilizar para ejecutar comandos de una sola línea desde una línea de comandos del sistema operativo utilizando la opción -r.
PHP Download with File_get_contents()
Una alternativa a file_get_contents()
y file_put_contents()
es el módulo fopen()
. Podemos utilizar este módulo para abrir una URL, leer su contenido y guardarlo en un archivo.
PHP Download with Fopen()
También podemos enviar el contenido descargado a una tubería, similar al ejemplo sin archivos que ejecutamos en la sección anterior usando cURL y wget.
PHP Download a File and Pipe it to Bash
Download Operations using Ruby
Ruby - Download a File
Download Operations using Perl
Perl - Download a File
Upload Operations
nc && /dev/tcp
Base64 Encoding / Decoding
Web Upload
Como se mencionó en la sección de File Transfer en Windows, podemos usar uploadserver
, un módulo extendido del módulo Python HTTP.Server
, que incluye una página de carga de archivos. Para este ejemplo en Linux, veamos cómo podemos configurar el módulo uploadserver
para usar HTTPS y así asegurar la comunicación.
Lo primero que necesitamos hacer es instalar el módulo uploadserver
.
Start Web Server
Ahora necesitamos crear un certificado. En este ejemplo, estamos utilizando un certificado autofirmado.
Create a Self-Signed Certificate
Start Web Server
Linux - Upload Multiple Files
Utilizamos la opción --insecure porque usamos un certificado autofirmado en el que confiamos.
Web Upload without certificate
Alternative Web File Transfer Method
Dado que las distribuciones de Linux suelen tener Python o PHP instalados, iniciar un servidor web para transferir archivos es muy sencillo. Además, si el servidor que hemos comprometido es un servidor web, podemos mover los archivos que queremos transferir al directorio del servidor web y acceder a ellos desde la página web.
Es posible configurar un servidor web usando varios lenguajes. Una máquina Linux comprometida puede no tener un servidor web instalado. En tales casos, podemos usar un servidor web miniatura. Lo que quizás les falte en seguridad, lo compensan con flexibilidad, ya que la ubicación del webroot y los puertos de escucha se pueden cambiar rápidamente.
Linux - Creating a Web Server with Python3
Linux - Creating a Web Server with Python2.7
Linux - Creating a Web Server with PHP
Linux - Creating a Web Server with Ruby
Download the File from the Target Machine
Nota: Cuando iniciamos un nuevo servidor web usando Python o PHP, es importante tener en cuenta que el tráfico entrante puede estar bloqueado. Estamos transfiriendo un archivo desde nuestro objetivo a nuestro host de ataque, pero no estamos subiendo el archivo.
SCP Upload
Es posible que encontremos algunas empresas que permitan el protocolo SSH (TCP/22) para conexiones salientes, y si ese es el caso, podemos usar un servidor SSH con la utilidad scp
para subir archivos. Intentemos subir un archivo a la máquina objetivo utilizando el protocolo SSH.
File Upload using SCP
Nota: Recuerda que la sintaxis de scp
es similar a la de cp
o copy
.
Upload Operations using Python3
Si queremos subir un archivo, necesitamos entender las funciones de un lenguaje de programación en particular para realizar la operación de subida. El módulo de solicitudes de Python3 permite enviar solicitudes HTTP (GET, POST, PUT, etc.) mediante Python. Podemos utilizar el siguiente código si queremos subir un archivo a nuestro servidor de subida de Python3.
Starting the Python uploadserver Module
Uploading a File Using a Python One-liner
Dividamos esta línea en varias líneas para comprender mejor cada parte.
Uploading a File Using a Python Script
Upload Operations using PHP
Starting the Python uploadserver Module
Uploading a File Using a PHP One-liner
Dividamos esta línea en varias líneas para comprender mejor cada parte.
Uploading a File Using a PHP Script
Upload Operations using Ruby
Starting the Python uploadserver Module
Uploading a File Using a Ruby One-liner
ES POSIBLE QUE SE NECESITE INSTALAR EN EL EQUIPO VÍCTIMA LA SIGUIENTE GEMA QUE NO VIENE POR DEFECTO INSTALADA EN EL SISTEMA.
gem install multipart-post
Dividamos esta línea en varias líneas para comprender mejor cada parte.
Uploading a File Using a Ruby Script
Upload Operations using Perl
Starting the Python uploadserver Module
Uploading a File Using a Ruby One-liner
Dividamos esta línea en varias líneas para comprender mejor cada parte.
Uploading a File Using a Perl Script
Última actualización