
PowerSploit - A PowerShell Post-Exploitation Framework
Bifurcado para añadir algunas características a PowerView.ps1 que realizo habitualmente de forma manual
Ejecuta código en una máquina objetivo.
Invoke-DllInjectionInyecta una DLL en el ID de proceso que elija.
Invoke-ReflectivePEInjectionCarga de forma reflectiva un archivo PE de Windows (DLL/EXE) en el proceso de PowerShell, o inyecta de forma reflectiva una DLL en un proceso remoto.
Invoke-ShellcodeInyecta shellcode en el ID de proceso que elija o dentro de PowerShell localmente.
Invoke-WmiCommandEjecuta un ScriptBlock de PowerShell en un equipo de destino 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 el código necesario para cargar una DLL administrada en memoria.
Out-EncryptedScriptCifra archivos de texto/scripts.
Remove-CommentElimina los comentarios y el espacio 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 elevadas 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 ninguna oportunidad contra PowerShell!
Find-AVSignatureLocaliza firmas de AV 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 e impersona tokens de inicio de sesión en el hilo actual.
Invoke-CredentialInjectionCrea inicios de sesión con credenciales en texto claro sin activar un sospechoso ID de evento 4648 (Inicio de sesión con credenciales explícitas).
Invoke-NinjaCopyCopia un archivo de un volumen con partición NTFS leyendo el volumen sin procesar y analizando las estructuras NTFS.
Invoke-MimikatzCarga de forma reflectiva Mimikatz 2.0 en memoria mediante PowerShell. Puede usarse para volcar credenciales sin escribir nada en el disco. Puede usarse para cualquier funcionalidad proporcionada por Mimikatz.
Get-KeystrokesRegistra las teclas pulsadas, la hora y la ventana activa.
Get-GPPPasswordRecupera la contraseña en texto claro y otra información de las cuentas distribuidas a través de Preferencias de directiva de grupo.
Get-GPPAutologonRecupera el nombre de usuario y la contraseña de inicio de sesión automático de registry.xml si se distribuyó a través de Preferencias de directiva 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 los objetos de credenciales de la Bóveda de Windows, incluidas las 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 el disco.
Causa el caos general con PowerShell.
Set-MasterBootRecordCódigo de prueba de concepto que sobrescribe el registro de arranque maestro (MBR) con el mensaje que elija.
Set-CriticalProcessHace que su máquina muestre una pantalla azul al salir de PowerShell.
Herramientas para ayudar a escalar privilegios en un objetivo.
PowerUpRepositorio central de comprobaciones comunes de escalada de privilegios, junto con algunos vectores de armamento.
Herramientas para ayudar en la fase de reconocimiento de una prueba de penetración.
Invoke-PortscanRealiza un escaneo de puertos simple utilizando sockets normales, basado (bastante) libremente en nmap.
Get-HttpStatusDevuelve los códigos de estado HTTP y la URL completa de las rutas especificadas cuando se le proporciona un archivo de diccionario.
Invoke-ReverseDnsLookupEscanea un rango de direcciones IP en busca de registros DNS PTR.
PowerViewPowerView es una serie de funciones que realiza la enumeración y explotación de redes y dominios 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.
Consulte la ayuda basada en comentarios de cada script individual para obtener información detallada de uso.
Para instalar este módulo, coloque la carpeta PowerSploit completa en uno de sus directorios de módulos. Las rutas de módulos de PowerShell predeterminadas se enumeran en la variable de entorno $Env:PSModulePath.
La ruta de módulos predeterminada por usuario es: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" La ruta de módulos predeterminada a nivel de equipo es: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Para usar el módulo, escriba Import-Module PowerSploit
Para ver los comandos importados, escriba Get-Command -Module PowerSploit
Si está ejecutando PowerShell v3 y desea eliminar la molesta advertencia '¿Realmente desea ejecutar scripts descargados de Internet?', una vez que haya colocado PowerSploit en su ruta de módulos, ejecute el siguiente comando:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Para obtener ayuda sobre cada comando individual, Get-Help es su amigo.
Nota: Todas las herramientas contenidas en este módulo se diseñaron para poder ejecutarse individualmente. Incluirlas en un módulo simplemente favorece una mayor portabilidad.
¡Necesitamos contribuciones! Si tiene una gran idea para PowerSploit, nos encantaría añadirla. Las nuevas incorporaciones requerirán lo siguiente:
Para todos los contribuyentes y futuros contribuyentes de PowerSploit, les pido que sigan esta guía de estilo al escribir sus scripts/módulos.
Evite Write-Host a toda costa. ¡Las funciones/cmdlets de PowerShell no son utilidades de línea de comandos! Las pull requests que contengan código que use Write-Host no se considerarán. En su lugar, debe generar objetos personalizados. Para obtener más información sobre cómo crear objetos personalizados, lea estos artículos:
Si desea mostrar información de depuración relevante en pantalla, use Write-Verbose. El usuario siempre puede añadir '-Verbose'.
Proporcione siempre ayuda descriptiva basada en comentarios para cada script. Además, asegúrese de incluir su 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úrese de que todas las funciones sigan la concordancia verbo-sustantivo adecuada de PowerShell. Use Get-Verb para enumerar los verbos predeterminados que usa PowerShell. Las excepciones a los verbos admitidos se considerarán caso por caso.
Prefiero que los nombres de las variables empiecen con mayúscula y sean lo más descriptivos posible.
Proporcione un espaciado lógico entre su código. Indente su código para hacerlo más legible.
Si se encuentra repitiendo código, escriba una función.
Capture todos los errores previstos y proporcione una salida significativa. Si tiene un error que debería detener la ejecución del script, use 'Throw'. Si tiene un error que no necesita detener la ejecución, use Write-Error.
Si está escribiendo un script que interactúa con la API de Win32, intente evitar compilar C# en línea con Add-Type. Intente usar el módulo PSReflect, si es posible.
No use rutas codificadas. Un script debería ser utilizable directamente, sin configuración previa. Nadie debería tener que modificar el código a menos que quiera hacerlo.
La compatibilidad con PowerShell v2 es muy deseable.
Use parámetros posicionales y haga que los parámetros sean obligatorios cuando tenga sentido hacerlo. Por ejemplo, busco algo como lo siguiente:
[Parameter(Position = 0, Mandatory = $True)]No use ningún alias a menos que tenga sentido para recibir entradas a través de la canalización. 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.
Intente que los comandos no se alarguen demasiado. Por ejemplo, una canalización es un lugar natural para un salto de línea.
No se exceda con los comentarios en línea. Úselos solo cuando ciertos aspectos del código puedan resultar confusos para un lector.
En lugar de usar Out-Null para suprimir la salida no deseada/irrelevante, guarde la salida no deseada en $null. Hacerlo proporciona una ligera mejora de rendimiento.
Use valores predeterminados para sus parámetros cuando tenga sentido. Lo ideal es que el script funcione sin requerir ningún parámetro.
Si un script crea objetos personalizados complejos, incluya un archivo ps1xml que formatee adecuadamente la salida del objeto.