
PowerSploit - Un framework de post-explotación para PowerShell
Ejecuta código en una máquina objetivo.
Invoke-DllInjectionInyecta una DLL en el ID de proceso que elijas.
Invoke-ReflectivePEInjectionCarga de manera reflectiva un archivo PE de Windows (DLL/EXE) en el proceso de PowerShell, o inyecta de manera reflectiva una DLL en un proceso remoto.
Invoke-ShellcodeInyecta shellcode en el ID de proceso que elijas o dentro de PowerShell localmente.
Invoke-WmiCommandEjecuta un ScriptBlock de PowerShell en un equipo objetivo y devuelve su salida formateada usando WMI como canal C2.
Modifica y/o prepara scripts para su ejecución en una máquina comprometida.
Out-EncodedCommandComprime, codifica en Base-64 y genera la salida de línea de comandos para un script de payload de PowerShell.
Out-CompressedDllComprime, codifica en Base-64 y genera código para cargar una DLL administrada en memoria.
Out-EncryptedScriptEncripta archivos de texto/scripts.
Remove-CommentElimina comentarios y espacios en blanco extra de un script.
Añade capacidades de persistencia a un script de PowerShell
New-UserPersistenceOptionConfigura opciones de persistencia a nivel de usuario para la función Add-Persistence.
New-ElevatedPersistenceOptionConfigura opciones de persistencia elevada para la función Add-Persistence.
Add-PersistenceAñade capacidades de persistencia a un script.
Install-SSPInstala una DLL de proveedor de soporte de seguridad (SSP).
Get-SecurityPackagesEnumera todos los paquetes de seguridad cargados (SSP).
¡El antivirus no tiene oportunidad contra PowerShell!
Find-AVSignatureLocaliza firmas de antivirus de un solo byte utilizando el mismo método que DSplit de 'class101'.
¡Todos tus datos me pertenecen!
Invoke-TokenManipulationEnumera los tokens de inicio de sesión disponibles. Crea procesos con tokens de inicio de sesión de otros usuarios y suplanta tokens de inicio de sesión en el hilo actual.
Invoke-CredentialInjectionCrea inicios de sesión con credenciales en texto plano sin desencadenar un Event ID 4648 sospechoso (Inicio de sesión con credenciales explícitas).
Invoke-NinjaCopyCopia un archivo de un volumen con partición NTFS leyendo el volumen en bruto y analizando las estructuras NTFS.
Invoke-MimikatzCarga de manera reflectiva Mimikatz 2.0 en memoria usando PowerShell. Puede usarse para volcar credenciales sin escribir nada en disco. Puede usarse para cualquier funcionalidad proporcionada por Mimikatz.
Get-KeystrokesRegistra las teclas presionadas, la hora y la ventana activa.
Get-GPPPasswordRecupera la contraseña en texto plano y otra información de cuentas enviadas a través de Preferencias de Política de Grupo.
Get-GPPAutologonRecupera el nombre de usuario y la contraseña de inicio de sesión automático de registry.xml si se enviaron a través de Preferencias de Política de Grupo.
Get-TimedScreenshotUna función que toma capturas de pantalla a intervalos regulares y las guarda en una carpeta.
New-VolumeShadowCopyCrea una nueva copia de sombra de volumen.
Get-VolumeShadowCopyEnumera las rutas de dispositivo de todas las copias de sombra de volumen locales.
Mount-VolumeShadowCopyMonta una copia de sombra de volumen.
Remove-VolumeShadowCopyElimina una copia de sombra de volumen.
Get-VaultCredentialMuestra objetos de credenciales del vault de Windows, incluyendo credenciales web en texto claro.
Out-MinidumpGenera un minidump de memoria completa de un proceso.
Get-MicrophoneAudioGraba audio desde el micrófono del sistema y lo guarda en disco.
Causa caos general con PowerShell.
Set-MasterBootRecordCódigo de prueba de concepto que sobrescribe el registro de arranque maestro con el mensaje que elijas.
Set-CriticalProcessProvoca que tu máquina muestre una pantalla azul al salir de PowerShell.
Herramientas para ayudar a escalar privilegios en un objetivo.
PowerUpCentro de verificación de comprobaciones comunes de escalada de privilegios, junto con algunos vectores de weaponización.
Herramientas para ayudar en la fase de reconocimiento de una prueba de penetración.
Invoke-PortscanRealiza un escaneo de puertos simple usando sockets regulares, basado (bastante) libremente en nmap.
Get-HttpStatusDevuelve los códigos de estado HTTP y la URL completa para rutas especificadas cuando se proporciona un archivo de diccionario.
Invoke-ReverseDnsLookupEscanea un rango de direcciones IP en busca de registros PTR de DNS.
PowerViewPowerView es una serie de funciones que realizan enumeración y explotación de red y dominio de Windows.
Una colección de diccionarios utilizados para ayudar en la fase de reconocimiento de una prueba de penetración. Los diccionarios se tomaron de las siguientes fuentes.
El proyecto PowerSploit y todos los scripts individuales están bajo la licencia BSD de 3 cláusulas a menos que se indique explícitamente lo contrario.
Consulta la ayuda basada en comentarios de cada script individual para obtener información detallada de uso.
Para instalar este módulo, coloca toda la carpeta PowerSploit en uno de tus directorios de módulos. Las rutas de módulos predeterminadas de PowerShell se enumeran en la variable de entorno $Env:PSModulePath.
La ruta de módulo predeterminada por usuario es: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" La ruta de módulo predeterminada a nivel de equipo es: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Para usar el módulo, escribe Import-Module PowerSploit
Para ver los comandos importados, escribe Get-Command -Module PowerSploit
Si estás ejecutando PowerShell v3 y deseas eliminar la molesta advertencia '¿Realmente deseas ejecutar scripts descargados de Internet?', una vez que hayas colocado PowerSploit en tu ruta de módulos, ejecuta el siguiente one-liner:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Para obtener ayuda sobre cada comando individual, Get-Help es tu amigo.
Nota: Las herramientas contenidas en este módulo fueron diseñadas para que puedan ejecutarse individualmente. Incluirlas en un módulo simplemente favorece una mayor portabilidad.
¡Necesitamos contribuciones! Si tienes una gran idea para PowerSploit, nos encantaría agregarla. Las nuevas adiciones requerirán lo siguiente:
Para todos los contribuyentes y futuros contribuyentes a PowerSploit, pido que sigan esta guía de estilo al escribir sus scripts/módulos.
Evita Write-Host a toda costa. ¡Las funciones/cmdlets de PowerShell no son utilidades de línea de comandos! No se considerarán solicitudes de extracción que contengan código que use Write-Host. En su lugar, debes generar objetos personalizados. Para obtener más información sobre la creación de objetos personalizados, lee estos artículos:
Si deseas mostrar información de depuración relevante en la pantalla, usa Write-Verbose. El usuario siempre puede agregar '-Verbose'.
Siempre proporciona ayuda descriptiva basada en comentarios para cada script. Además, asegúrate de incluir tu nombre y una licencia BSD de 3 cláusulas (a menos que existan circunstancias atenuantes que impidan la aplicación de la licencia BSD).
Asegúrate de que todas las funciones sigan la concordancia verbo-sustantivo adecuada de PowerShell. Usa Get-Verb para enumerar los verbos predeterminados utilizados por PowerShell. Las excepciones a los verbos admitidos se considerarán caso por caso.
Prefiero que los nombres de las variables estén en mayúsculas y sean lo más descriptivos posible.
Proporciona un espaciado lógico entre tu código. Indenta tu código para hacerlo más legible.
Si te encuentras repitiendo código, escribe una función.
Captura todos los errores anticipados y proporciona una salida significativa. Si tienes un error que debe detener la ejecución del script, usa 'Throw'. Si tienes un error que no necesita detener la ejecución, usa Write-Error.
Si estás escribiendo un script que interactúa con la API de Win32, trata de evitar compilar C# en línea con Add-Type. Intenta usar el módulo PSReflect, si es posible.
No uses rutas codificadas. Un script debe ser utilizable directamente. Nadie debería tener que modificar el código a menos que quiera.
Se desea altamente la compatibilidad con PowerShell v2.
Usa parámetros posicionales y haz que los parámetros sean obligatorios cuando tenga sentido hacerlo. Por ejemplo, busco algo como lo siguiente:
[Parameter(Position = 0, Mandatory = $True)]No uses alias a menos que tenga sentido para recibir entrada de pipeline. Hacen que el código sea más difícil de leer para las personas que no están familiarizadas con un alias en particular.
Trata de no dejar que los comandos se extiendan demasiado. Por ejemplo, un pipeline es un lugar natural para un salto de línea.
No te excedas con los comentarios en línea. Úsalos solo cuando ciertos aspectos del código puedan ser confusos para el lector.
En lugar de usar Out-Null para suprimir la salida no deseada/irrelevante, guarda la salida no deseada en $null. Hacerlo proporciona una ligera mejora de rendimiento.
Usa valores predeterminados para tus parámetros cuando tenga sentido. Idealmente, deseas un script que funcione sin requerir ningún parámetro.
Si un script crea objetos personalizados complejos, incluye un archivo ps1xml que formatee correctamente la salida del objeto.