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

 md5sum <file_name>
e7f7d2522cc7fdec3e6cc2c1e2f20819  <file_name>

Download Operations

Base64 Encoding / Decoding

ATTACKER
cat archivo.txt | base64 -w0; echo
VICTIM
echo -n '<BASE64_CODE>' | base64 -d > archivo.txt

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


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

Nota: La URL se puede utilizar como nombre de archivo con la función @file si se han habilitado los contenedores fopen.


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


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


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


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

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

¿Te fue útil?