
Pasar el hash a una tubería con nombre para la suplantación de tokens.
Este proyecto es un código PoC para usar Pass-the-Hash para autenticación en una tubería con nombre local mediante suplantación de usuario. También hay una entrada de blog con explicación:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Se basa en gran medida en el código de los proyectos Invoke-SMBExec.ps1 y RoguePotato.
En el pasado me enfrenté a ciertas situaciones de proyectos de Seguridad Ofensiva en las que ya tenía el hash NTLM de una cuenta de usuario bajo privilegio y necesitaba un shell para ese usuario en el sistema comprometido actual, pero eso no era posible con las herramientas públicas actuales. Imagina dos hechos más para una situación así: el hash NTLM no podía ser descifrado y no había ningún proceso del usuario víctima para ejecutar shellcode en él ni para migrar a ese proceso. Esto puede sonar como un caso extremo absurdo para algunos de ustedes. Sin embargo, lo he experimentado varias veces. No solo en un compromiso pasé mucho tiempo buscando la herramienta/técnica adecuada en esa situación específica.
Mis objetivos personales para una herramienta/técnica eran:
bajo privilegio; dependiendo de los objetivos del compromiso, podría ser necesario acceder a un sistema con un usuario específico como el CEO, cuentas de RRHH, administradores SAP u otrosEl usuario suplantado desafortunadamente no tiene autenticación de red permitida, ya que el nuevo proceso utiliza un token de suplantación restringido. Por lo tanto, solo puedes usar esta técnica para acciones locales con otro usuario.
Hay dos formas de usar esta técnica. Puedes compilar \Resources\PipeServerImpersonate.sln y colocar el ejecutable en el host remoto y conectarte a la tubería con nombre mediante \Resources\Invoke-NamedPipePTH.ps1:
O puedes usar el script independiente para permanecer en memoria:
Si no deseas colocar un binario para su ejecución, solo pasa argumentos para binarios nativos de Windows como Powershell
Invoke-ImpersonateUser-PTH -Username USERNAME -Hash NTLMHASH -Domain DOMAIN -PipeName mypipe -binary "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -argument "-nop -w 1 -sta -enc BASEBLOB"