Miscellaneous File Transfer Methods
Hemos cubierto varios métodos para transferir archivos en Windows y Linux, utilizando diferentes lenguajes de programación. A continuación, exploraremos métodos alternativos como el uso de Netcat, Ncat, y transferencias de archivos mediante sesiones de RDP y PowerShell.
Netcat
Netcat (a menudo abreviado como nc
) es una utilidad de redes para leer y escribir en conexiones de red utilizando TCP o UDP, lo que permite operaciones de transferencia de archivos. El Netcat original fue lanzado en 1995 por Hobbit, pero no ha sido mantenido a pesar de su popularidad. Debido a su flexibilidad, el proyecto Nmap produjo Ncat, una reimplementación moderna que soporta SSL, IPv6, proxies SOCKS y HTTP, entre otras funcionalidades.
En este apartado, utilizaremos tanto el Netcat original como Ncat.
Nota: Ncat es utilizado en PwnBox de HackTheBox como
nc
,ncat
ynetcat
.
Transferencia de Archivos con Netcat y Ncat
La máquina comprometida o la máquina atacante pueden iniciar la conexión, lo cual es útil si un firewall impide el acceso al objetivo. En este ejemplo, transferiremos SharpKatz.exe desde nuestro Pwnbox a la máquina comprometida, utilizando dos métodos.
Netcat - Máquina Comprometida - Escuchando en el Puerto 8000
Primero, iniciaremos Netcat (nc
) en la máquina comprometida, escuchando con la opción -l
, seleccionando el puerto 8000 con -p 8000
, y redirigiendo la salida estándar (stdout
) con >
hacia el archivo SharpKatz.exe
.
Si la máquina comprometida está usando Ncat, necesitaremos especificar --recv-only
para cerrar la conexión una vez que la transferencia haya finalizado.
Netcat - Máquina Atacante - Enviando Archivo a la Máquina Comprometida
Desde nuestra máquina atacante, nos conectaremos a la máquina comprometida en el puerto 8000 usando Netcat y enviaremos el archivo SharpKatz.exe como entrada (input
) a Netcat. La opción -q 0
le indicará a Netcat cerrar la conexión una vez finalizada la transferencia.
Con Ncat en la máquina atacante, podemos usar la opción --send-only
en lugar de -q
. El flag --send-only
hace que Ncat termine una vez que su entrada haya sido agotada.
Transferencia Inversa: Escuchando en la Máquina Atacante
En lugar de escuchar en la máquina comprometida, podemos conectarnos a un puerto en nuestra máquina atacante para realizar la transferencia de archivos. Este método es útil si hay un firewall que bloquea conexiones entrantes. Escucharemos en el puerto 443 de nuestro Pwnbox y enviaremos el archivo SharpKatz.exe como entrada a Netcat.
Máquina Atacante - Enviando Archivo como Entrada a Netcat
Máquina Comprometida - Conectándose a Netcat para Recibir el Archivo
Podemos hacer lo mismo usando Ncat:
Máquina Atacante - Enviando Archivo como Entrada a Ncat
Máquina Comprometida - Conectándose a Ncat para Recibir el Archivo
Si no tenemos Netcat o Ncat en la máquina comprometida, Bash también admite operaciones de lectura/escritura utilizando un archivo pseudo-dispositivo /dev/TCP/
.
Escribir en este archivo abre una conexión TCP a host:port
, y esta característica puede ser utilizada para transferencias de archivos.
Netcat - Enviando Archivo como Entrada a Netcat
Ncat - Enviando Archivo como Entrada a Netcat
Máquina Comprometida Conectándose a Netcat Usando /dev/tcp para Recibir el Archivo
Nota: La misma operación puede utilizarse para transferir archivos desde el host comprometido hacia nuestro Pwnbox.
Transferencia de Archivos en Sesión de PowerShell
Ya hablamos sobre realizar transferencias de archivos con PowerShell, pero puede haber escenarios donde HTTP, HTTPS o SMB no estén disponibles. En esos casos, podemos usar PowerShell Remoting, también conocido como WinRM, para realizar operaciones de transferencia de archivos.
PowerShell Remoting nos permite ejecutar scripts o comandos en un ordenador remoto utilizando sesiones de PowerShell. Los administradores suelen usar esta técnica para gestionar ordenadores remotos en una red, y nosotros también podemos utilizarla para transferir archivos. De forma predeterminada, habilitar PowerShell Remoting crea tanto un listener HTTP como uno HTTPS. Los listeners se ejecutan en los puertos TCP/5985 para HTTP y TCP/5986 para HTTPS.
Para crear una sesión de PowerShell Remoting en un ordenador remoto, necesitamos acceso administrativo, ser miembro del grupo de Usuarios de Gestión Remota, o tener permisos explícitos para PowerShell Remoting en la configuración de la sesión. Vamos a crear un ejemplo y transferir un archivo desde DC01 a DATABASE01, y viceversa.
Tenemos una sesión como Administrador en DC01, el usuario tiene derechos administrativos sobre DATABASE01, y PowerShell Remoting está habilitado. Utilicemos Test-NetConnection
para confirmar que podemos conectar a WinRM.
Desde DC01 - Confirmar que el puerto TCP 5985 de WinRM está abierto en DATABASE01
Dado que esta sesión ya tiene privilegios sobre DATABASE01, no es necesario especificar credenciales. En el ejemplo a continuación, se crea una sesión en el ordenador remoto llamado DATABASE01 y se almacena en la variable $Session
.
Crear una Sesión de PowerShell Remoting a DATABASE01
Podemos usar el cmdlet Copy-Item
para copiar un archivo desde nuestra máquina local DC01 hacia la sesión DATABASE01 que hemos creado en $Session
, o viceversa.
Copiar samplefile.txt
desde nuestro Localhost hacia la sesión de DATABASE01
samplefile.txt
desde nuestro Localhost hacia la sesión de DATABASE01Copiar DATABASE.txt
desde la sesión de DATABASE01 hacia nuestro Localhost
DATABASE.txt
desde la sesión de DATABASE01 hacia nuestro LocalhostRDP
RDP (Remote Desktop Protocol) se usa comúnmente en redes Windows para acceso remoto. Podemos transferir archivos usando RDP copiando y pegando. Podemos hacer clic derecho y copiar un archivo desde la máquina Windows a la que nos conectamos y pegarlo en la sesión RDP.
Si nos conectamos desde Linux, podemos usar xfreerdp
o rdesktop
. En el momento de redactar, ambas herramientas permiten copiar archivos desde nuestra máquina objetivo hacia la sesión RDP, pero puede haber escenarios en los que esto no funcione como se espera.
Como alternativa a copiar y pegar, podemos montar un recurso local en el servidor RDP remoto. Tanto rdesktop
como xfreerdp
permiten exponer una carpeta local en la sesión RDP remota.
Montar una Carpeta en Linux Usando rdesktop
Montar una Carpeta en Linux Usando xfreerdp
Para acceder al directorio, podemos conectarnos a \\tsclient\
, lo que nos permitirá transferir archivos hacia y desde la sesión RDP.
Nota: Esta unidad no es accesible para otros usuarios que inicien sesión en el equipo objetivo, incluso si logran secuestrar la sesión RDP.
Last updated